如何在另一个dll中使用EF使用asp.net动态数据,我不想将连接字符串放在web.config或任何配置文件中。 我在Global.asax中有这个代码
model.RegisterContext(()=> new MyObjectContext(“entityconnectionString”),new ContextConfiguration(){ScaffoldAllTables = true});
defalut页面没问题但是当我点击任何表格查看详情时,我收到此错误: 指定的命名连接在配置中找不到,不打算与EntityClient提供程序一起使用,或者无效。 我该如何解决这个问题?
答案 0 :(得分:6)
我能够通过强制加载MetadataWorkspace并使用RegisterContext()的重载来解决这个问题。
var context = new MyEntities(); // DataContext
context.MetadataWorkspace.LoadFromAssembly(typeof(MyEntity).Assembly); // An EF Entity
var config = new ContextConfiguration() {ScaffoldAllTables = true};
DefaultModel.RegisterContext(() => context, config);
答案 1 :(得分:1)
我遇到了同样的问题。我在一个名为NW.DataModel的项目中有我的EDMX数据模型文件。我为POCO对象添加了代码生成项,然后我将其移到一个名为NW.Entities的单独项目中,这样它们就可以是持久性无知的。我必须在Context对象中调整一些名称空间生成的属性设置,以便Context在构建解决方案时识别实体。这一切都很好,我可以在Console应用程序和WCFdata服务中使用这些项目。现在我想为一些基本的管理员添加一个动态数据站点,那就是当单独的程序集不再一起玩时。我只是使用Northwind数据库测试项目设置。
我收到此错误:无法找到“NWEntities.Shipper”的CLR类型。
这篇博客文章似乎有一些想法,并链接到论坛,其中该问题最近有一些活动,但还没有来自微软的消息。
答案 2 :(得分:0)
杰夫的答案对我有用,但我时不时地得到ObjectDisposed
例外。
我已经更改了上下文工厂以创建新的上下文,这似乎有效:
var config = new ContextConfiguration() { ScaffoldAllTables = true };
DefaultModel.RegisterContext(() =>
{
var context = new MyEntities(); // ObjectContext
context.MetadataWorkspace.LoadFromAssembly(typeof(AnyPOCOInOtherAssembly).Assembly);
return context;
},
config);