我在Unity中使用EF4 ObjectContext时遇到问题.具体来说,当Unity尝试使用以下代码解析我的ObjectContext时:
container.RegisterType<ObjectContext, MyObjectContext>(
new TransientLifetimeManager(), new InjectionConstructor());
它给了我:
The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.
我假设它能够使用在创建EF4数据模型时设置的硬连线连接(与无参数构造函数一起使用),但似乎我必须明确地传递它:
container.RegisterType<ObjectContext, MyObjectContext>(
new TransientLifetimeManager(), new InjectionConstructor(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
}