我即将开始一个Web应用程序,我想在(主要)代码优先使用实体框架。
但是,除了我计划创建的特定于应用程序的模型之外,我还必须使用外部用户数据库。是否可以首先将我的一个模型指定为数据库并使用单独的数据库上下文?
答案 0 :(得分:20)
从技术上讲,它是可能的,但我不推荐它。只需首先使用代码优先就好了。是的,具有讽刺意味的是,您可以使用"代码优先"使用现有数据库。
只需创建与现有数据库中的表匹配的POCO即可。如果您的POCO名称与您的表名不同(并非所有表名都是有效或适当的类名),您可以使用Table
属性明确告知EF您的POCO使用哪个表:
[Table("SomeTable")]
public class MyAwesomeEntity
{
...
}
然后,您将需要一个专门针对此现有数据库和属于它的任何实体的单独上下文。您所要做的就是1)告诉它应该使用什么连接字符串和2)关闭数据库初始化,因此EF不会尝试实际创建数据库。
public MyExistingDatabaseContext : DbContext
{
public MyExistingDatabaseContext()
: base("MyExistingDatabaseConnectionStringName")
{
Database.SetInitializer<MyExistingDatabaseContext>(null);
}
// DbSets here
}
就是这样。每当您需要使用现有数据库中的实体时,只需新增此上下文或以其他方式获取它,例如通过DI(依赖注入)容器,然后转到城镇。
答案 1 :(得分:0)
如果您已经有一个现有的数据库,但想先使用代码,则应该先使用“数据库代码”选项。
1)在“模型”文件夹中,右键单击“添加”,“新项目”
2)在“数据”选项卡中选择“ ADO.NET实体数据模型”。
3)输入型号名称,
4)从数据库中选择“代码优先”。
5)选择连接字符串,
6)选择要包含在模型中的数据库对象。
您不必从头开始编写上下文和模型的代码,因为它将为您生成类。