小编Gui*_*ais的帖子

如何在我的项目中实现强大的每个请求会话模式,同时专注于信息隐藏?

我目前正在构建一个ASP.NET MVC项目,NHibernate作为其持久层.

目前,已经实现了一些功能,但只使用本地NHibernate会话:访问数据库(读取或写入)的每个方法都需要使用"using()"子句实例化自己的NHibernate会话.

问题是我想利用NHibernate的延迟加载功能来提高项目的性能.

这意味着每个请求都会打开一个NHibernate会话,直到呈现视图为止.此外,必须支持同时请求(同时多个会话).

我怎样才能尽可能干净地实现这一目标?

我在网上搜索了一下,了解了每个请求的会话模式.我看到的大多数实现使用某种Http*(HttpContext等)对象来存储会话.此外,使用Application_BeginRequest/Application_EndRequest函数很复杂,因为当我只想为每个请求实例化一次会话时,它们会针对每个HTTP请求(aspx文件,css文件,js文件等)被触发.

我担心的是我不希望我的视图或控制器能够访问NHibernate会话(或者更常见的是NHibernate命名空间和代码).这意味着我不想在控制器级别处理会话,也不想在视图级别处理会话.

我有几个选择.哪一个看起来最好?

  • 使用在控制器操作之前和之后触发的拦截器(如GRAILS).这些将打开和关闭会话/交易.这可能在ASP.NET MVC世界中吗?
  • 在Web上下文中使用NHibernate提供的CurrentSessionContext Singleton.以这个页面为例,我认为这很有希望,但仍需要控制器级别的过滤器.
  • 使用HttpContext.Current.Items存储请求会话.这与Global.asax.cs中的几行代码相结合,可以轻松地为我提供请求级别的会话.但是,这意味着将在NHibernate和我的视图(HttpContext)之间注入依赖项.

非常感谢你!

nhibernate asp.net-mvc session information-hiding

11
推荐指数
1
解决办法
6788
查看次数

使用母版页时访问C#中的内容控件

今天是个好日子,

我正在ASP.NET中构建一个页面,并在此过程中使用母版页.

我的母版页中有一个内容地点持有人名称"cphBody",其中包含该母版页作为母版页的每个页面的正文.

在ASP.NET网页中,我有一个Content标签(引用"cphBody"),它还包含一些控件(按钮,Infragistics控件等),我想在CodeBehind文件中访问这些控件.但是,我不能直接这样做(this.myControl ...),因为它们嵌套在Content标签中.

我找到了FindControl方法的解决方法.

ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder) Master.FindControl("cphBody");
ControlType myControl = (ControlType) contentPlaceHolder.FindControl("ControlName");
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我怀疑它不是一个非常好的设计.你们知道更优雅的方式吗?

谢谢!

Guillaume Gervais.

asp.net master-pages findcontrol

6
推荐指数
2
解决办法
4万
查看次数

LINQ-NHibernate - 仅为复杂对象选择几个字段(包括Collection)

我在我的一个项目(和ASP.NET MVC应用程序)中使用Fluent NHibernate,使用LINQ查询数据(使用LINQ到NHibernate库).

更改了对象名称以保护无辜者.

假设我在数据库(MySQL)中有以下类Foo,Bar,Baz及其相应的表.

Foo与Fluent映射中定义的Bar(表"FooBar")和Baz(表"FooBaz")有多对多的关系.因此,类接口定义如下:

public class Foo {
    public virtual int id { get; set; }
    public virtual string name { get; set; }
    public virtual string email { get; set; }
    public virtual IList<Bar> bars { get; set; }
    public virtual IList<Baz> bazes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常标准的课程.我们可以看到一个Foo对象将有一个条形和bazes列表.

尝试执行LINQ查询时出现问题.

如果我这样做一个简单的查询,它工作正常(where子句不重要):

var foos = from foo in session.Linq<Foo>()
           where email.equals("foo@bar.com")
           select foo;

IList<Foo> listFoos = foos.ToList();
Run Code Online (Sandbox Code Playgroud)

这将返回一个Foos列表,其中填充了所有字段(id,name,email,bars,bazes).log4net显示NHibernate对集合执行单独的查询.

当我只想加载一些字段时出现问题.例如,我可能只想加载查询中的条形,而不是bazes.

此查询编译,但在运行时产生错误:

var foos = from foo in session.Linq<Foo>()
           where …
Run Code Online (Sandbox Code Playgroud)

c# linq nhibernate asp.net-mvc linq-to-nhibernate

5
推荐指数
1
解决办法
1万
查看次数

Java中必需的可复制接口

我在Java中遇到了一个小问题.我有一个名为Modifiable的界面.实现此接口的对象是可修改的.

我也有收到两个修改的对象ModifyCommand类(Command模式)(交换它们在列表中进一步上 - 这不是我的问题,我设计的解决方案的话).

ModifyCommand类首先创建可修改对象的克隆.从逻辑上讲,我使我的Modifiable接口扩展了Cloneable.接口然后定义一个clone()方法,其实现类必须重新定义.

然后,在ModifyCommand中,我可以这样做:firstModifiableObject.clone().我的逻辑是,实施修改的类必须从对象重新定义clone方法,因为他们将可复制(这就是我想要做的).

问题是,当我定义类实现了可修改的,我想重写克隆(),它不会让我,指出从Object类的clone()方法隐藏可修改的一个.

我该怎么办?我的印象是"我做错了"......

谢谢,

纪尧姆.

编辑:它认为我会忘记clone()的事情.我将a)假设传递给Modifiable对象(实现接口)的对象已经克隆或b)创建另一个调用的方法,例如copy(),它基本上会执行Modifiable对象的深层复制(或者通用解决方案可以工作......).

java overriding clone interface

4
推荐指数
1
解决办法
5721
查看次数

从MP3中提取原始音频/波形

这个问题在我脑海里已经存在了几年,我从来没有真正找到答案.

我想要做的是提取MP3文件的实际波形/ PCM,以便我可以使用声卡(当然)来播放它.

理想情况下,我会尝试一些DSP效果.

我的第一步是调查LAME,但我没有找到任何与程序中的MP3解码或类似内容有关的内容.

所以我问我在哪里可以找到这样的东西.

我应该用什么语言?我在想C,但也许有编程语言可以更有效地完成工作.

谢谢!

纪尧姆.

mp3 waveform decode pcm

1
推荐指数
1
解决办法
6748
查看次数