Entity framework 使用Unity注册EF4 ObjectContext的正确方法?

Entity framework 使用Unity注册EF4 ObjectContext的正确方法?,entity-framework,unity-container,Entity Framework,Unity Container,我在Unity中的EF4 ObjectContext有问题。具体来说,当Unity尝试使用以下代码解析我的ObjectContext时: container.RegisterType<ObjectContext, MyObjectContext>( new TransientLifetimeManager(), new InjectionConstructor()); container.RegisterType( 新的TransientLifetimeManager(),

我在Unity中的EF4 ObjectContext有问题。具体来说,当Unity尝试使用以下代码解析我的ObjectContext时:

container.RegisterType<ObjectContext, MyObjectContext>(
    new TransientLifetimeManager(), new InjectionConstructor());
container.RegisterType(
新的TransientLifetimeManager(),新的InjectionConstructor());
它给了我:

指定的命名连接在配置中找不到、不打算与EntityClient提供程序一起使用,或者无效

我假设它能够使用在创建EF4数据模型(与无参数构造函数一起使用)时设置的硬连线连接,但似乎我必须显式地传入:

container.RegisterType<ObjectContext, MyObjectContext>(
    new TransientLifetimeManager(), new InjectionConstructor(connectionString));
container.RegisterType(
新的TransientLifetimeManager(),新的注入构造函数(connectionString));
另外,由于此方法似乎创建了我的(一次性)ObjectContext的实例,何时是销毁它的适当位置

或者,我应该完全改变这种做法吗

提前感谢。

异常“指定的命名连接在配置中找不到,不打算与EntityClient提供程序一起使用,或者无效。”显然不是由于未能解析注册类型而导致的,但这是一个EF异常

EF设计器应该创建一个具有以下构造函数的上下文:

public MyObjectContext() : base("name=MyObjectContext", "MyObjectContext")
{
    ...
}
并将连接字符串添加到app.config/web.config。假设设计者没有做错这一点,我会排除这个“命名连接”是“不打算与EntityClient提供程序一起使用,或者是无效的”。“命名连接”仍然是“在配置中找不到的”

是否检查了连接字符串是否位于解析ObjectContext的项目的app.config/web.config中?例如,如果您的EF模型位于单独的类库中,那么EF将在该项目中创建一个具有正确连接字符串的app.config。如果您从引用EF类库的其他项目中使用此模型,则需要手动将连接字符串复制到此项目的app.config/web.config。EF不会查看类库的配置

关于您的问题,什么是销毁ObjectContext的合适位置,最普遍的答案是:“当您不再需要它时”。在不了解项目背景的情况下,很难给出建议。如果您需要通过一种方法访问数据,我认为您可以编写:

using (var context = container.Resolve<ObjectContext>())
{
    // your EF operations
}
使用(var context=container.Resolve())
{
//您的EF操作
}

谢谢Slauma,我没有想到在我的EF项目中检查app.config。你说得对,就在那里。将该连接字符串复制到我的web.config文件允许我将其返回到无参数构造函数。关于ObjectContext的处理,我需要更深入地研究这个问题,并且可能会在另一个问题上打开这个话题。我使用的是我找到的一些示例实现,需要更好地理解它,然后才能确定在哪里最好地处理ObjectContext。