2013-04-11 131 views
6

我期待在我现有的项目中实现实体框架版本4.3.1,它不会跟随此EF。数据库已经开发,目前正在使用的应用ado.net。在这种情况下,如何我从EF开始工作,是数据库优先,代码优先。实体框架与现有数据库

回答

13

即使在数据库已经存在我仍然使用代码优先的方法,使用注释映射表,因为域比EDMX文件更有组织。如果有许多表格,那么可视化的EDMX就会变得毫无用处,因为设计将会遍布各处的数据和连接。

两个步骤,你可以用这种方法开始:

1)创建一个域模型类,Customer例如,使用数据说明其映射到表:

[Table("tbl_cust")] 
public class Customer 
{ 
    [Key] 
    [Column("cust_id")] 
    public int CustomerId { get; set; } 
    [Column("cust_name")] 
    public string Name { get; set; } 
    // Add other properties below 
} 

2)创建上下文类从DbContext派生并设置DbSet<T>属性每个模型,我们只有一个在我们的例子这样:

public class MyApplicationContext: DbContext 
{ 
    public MyApplicationContext() : base("name=ConnectionStringName") { } 

    public DbSet<Customer> Customers { get; set; } 
} 

现在在你的代码可以实例化派生类DbContext和使用LINQ进行查询的任何地方:

var _db = new MyApplicationContext(); 
var customer = _db.Customers.Where(c => c.CustomerId == 37).FirstOrDefault(); 

不要忘记添加一个引用的EntityFramework装配使用的NuGet。

祝你好运。

+0

感谢所有的真棒解决方案。我想我需要先与数据库首先,即使我有兴趣使用代码第一次通过反向工程师代码first.I尝试代码第一,但没有运气它不创建EF类和失败,也许我的数据库设计得不是很好。失败的其他原因? – 2013-04-11 16:07:59

+0

你是什么意思“它没有创建EF类”? – 2013-04-11 16:57:57

+0

by EF Classes我的意思是说表的Domain类,模型文件夹。我没有看到任何填充后,我做了反向工程师的代码first.I以下链接http://msdn.microsoft.com/en -us/data/jj200620.aspx – 2013-04-11 17:11:45

1

由于您的数据库已经存在,显而易见的选择是数据库第一。如果数据库的设计具有常识,那么它(大部分)的效果很好。

0

我想问题是如果你想使用EF设计器来可视化你的数据库或不。既然你在看EF 4.3.1(实际上你应该看EF5不是4.3.1 - EF5是最新版本)我假设你不关心设计师。在这种情况下,您可以使用EF Power Tools对数据库进行逆向工程。这将创建一组将匹配您的数据库的类。请注意,由于数据库已经创建,EF将无法检测到类中的更改(与Code First创建的数据库相比,当额外信息存储在数据库中且EF能够确定模型是否已更改时)。请务必阅读此blog post - 它包含许多细节,您可能会发现有助于做出决定。 如果你关心能够在设计师中看到你的模型,你可以使用VS来逆向工程DB。如果你使用VS2012,你将默认获得EF5和DBContext。与使用Code First的区别在于,不是根据您的类建立模型EF需求,而是将模型保存在作为项目一部分的EDMX文件中(并用于为您生成代码)