7

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

4

3 回答 3

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 程序集的引用。

祝你好运。

于 2013-04-11T15:06:56.737 回答
1

由于您的数据库已经存在,显而易见的选择是数据库优先。如果数据库是按照常识设计的,它(大部分)效果很好。

于 2013-04-11T14:42:52.467 回答
0

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

于 2013-04-11T14:56:37.793 回答