实体框架与现有数据库

时间:2013-04-11 14:41:14

标签: entity-framework

我正在寻找在我现有的项目中实现实体框架版本4.3.1,它不遵循这个EF。数据库已经开发并且目前用于应用ado.net。在这种情况下我该如何开始使用在EF上工作,是数据库优先,代码优先。

3 个答案:

答案 0 :(得分:14)

即使数据库已经存在,我仍然使用Code First方法,使用注释映射表,因为域的组织方式比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();

不要忘记使用NuGet添加对EntityFramework程序集的引用。

祝你好运。

答案 1 :(得分:1)

由于您的数据库已经存在,显而易见的选择是数据库优先。如果数据库的设计具有常识,那么它(大多数情况下)效果很好。

答案 2 :(得分:0)

我认为问题在于您是否要使用EF Designer来可视化您的数据库。既然你在看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文件中(并用于为您生成代码)