【发布时间】:2016-06-21 13:02:41
【问题描述】:
是否可以在每次传入连接字符串时使用实体框架动态创建整个模型(数据库优先)?
我尝试了以下方法:
MetaModel model = new MetaModel();
model.RegisterContext(() => new Model1(connectionString),
new ContextConfiguration()
{
ScaffoldAllTables = true
});
但它总是给我一个错误
System.Web.DynamicData.dll 中出现“System.ArgumentException”类型的未处理异常
附加信息:不支持上下文类型“DbContext.Model1”。
更多信息:
我在数据库中拥有我无法控制的所有必需表,如果我需要旧表中的任何新表或列,那么数据库人员会为我运行适当的脚本。
我正在尝试使用 EF 创建一个通用 DLL,我可以在各种应用程序 6 上使用它,包括 winforms 和 mvc 网络应用程序。我正在尝试找出解决此问题的最佳方法。
我可以将codefirst 和databasefirst 混合在一起吗?
codefirst 不会为我生成我已经拥有的表格吗?
我的每个应用程序都包含 1 个 winforms 和 1 个 Web 应用程序,它们共享数据源,例如
测试 1 Windows 应用和测试 1 MVC 应用 = DB 1
测试 2 Windows 应用和测试 2 MVC 应用 = DB 2
测试 3 Windows 应用和测试 3 MVC 应用 = DB 3
所以我需要将connectionstring 传递给DBContext。我的实体将如何运作?
如果需要更多信息,请告诉我。
【问题讨论】:
-
你为什么要这么做?为什么首先需要代码中的元模型?
-
@BassamAlugili 我目前有一个 dll,我在连接字符串、查询或存储过程中传递它,并且 dll 负责处理它。我想沿着 EF 的路线走,并且我在数据库中拥有所有表,因此我认为也许可以动态创建模型
-
嗨@Code也许你可以参考this
-
@ShawnYan 谢谢你的链接,正如你从我的代码 sn-p 中看到的那样,我已经传入了连接字符串,但我需要弄清楚实体是如何工作的?例如如果连接字符串从
A更改为B并且数据库中的大多数表都不同,那么会发生什么? -
您的问题不清楚。
How would my Entities work?- 您的实体需要在编译时定义,如果您的数据库模型相同,则无需重新定义实体。Wouldn't codefirst generate tables for me which I already have?如果您的数据库人员在您询问时运行适当的脚本,为什么您需要生成表?
标签: c# asp.net asp.net-mvc winforms entity-framework