是否有可能首先混合数据库并将第一个模型与实体框架混合?

dre*_*att 11 c# asp.net asp.net-mvc entity-framework

我即将开始一个Web应用程序,我想使用实体框架(主要是)代码优先模型.

但是,除了我计划创建的特定于应用程序的模型之外,我还必须使用外部用户数据库.是否可以首先将我的一个模型指定为数据库并使用单独的数据库上下文?

Chr*_*att 20

从技术上讲,这是可能的,但我不推荐它.全面使用代码优先功能要好得多.是的,具有讽刺意味的是,您可以在现有数据库中使用"代码优先".

只需创建与现有数据库中的表匹配的POCO即可.如果您的POCO名称与您的表名不同(并非所有表名都是有效或适当的类名),您可以使用该Table属性明确告知EF您的POCO使用哪个表:

[Table("SomeTable")]
public class MyAwesomeEntity
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后,您将需要一个专门用于此现有数据库的单独上下文以及属于它的任何实体.您所要做的就是1)告诉它应该使用什么连接字符串和2)关闭数据库初始化,因此EF不会尝试实际创建数据库.

public MyExistingDatabaseContext : DbContext
{
    public MyExistingDatabaseContext()
        : base("MyExistingDatabaseConnectionStringName")
    {
        Database.SetInitializer<MyExistingDatabaseContext>(null);
    }

    // DbSets here
}
Run Code Online (Sandbox Code Playgroud)

就是这样.每当您需要使用此现有数据库中的实体时,只需新增此上下文或以其他方式获取它,例如通过DI(依赖注入)容器,然后转到城镇.

  • 此外,值得一提的是,如果在Visual Studio中安装EF Power Tools扩展,它可以从您的exisitng数据库生成真正的POCO(而不是edmx废话).http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d (8认同)