使用Entity Framework手动将POCO映射到现有表

时间:2015-12-12 22:51:42

标签: c# entity-framework ef-code-first ef-fluent-api

我有一个现有的数据库表Movie。现在我想写一个POCO Movie.cs,它将映射到该表。我想部分控制映射,因为我试图了解有关EF的更多信息。

Movie表有3个字段:Title VARCHAR(255,), ReleaseDate DATETIME, Price MONEY。我的DbContext派生类对此会是什么样的?

来自Java / Hibernate背景,我想我只会将POCO中的字段映射到表格中的cols,但它在EntityFramework中似乎并不是那么直接。

我似乎只找到了这两个选项:

  1. " Code First" - >用C#编写所有内容,然后让EntityFramework生成并运行迁移,以不断更新和播种数据库。

  2. "数据库优先" - >创建数据库,然后在VS中创建一个数据库项目并生成一个EDMX文件,为您生成POCO

  3. 对于将单个POCO映射到单个表的目标,两者似乎过于迟钝。我错过了什么?我已经听说过" Fluent API,"但这似乎让我回到了1或2。

    我努力在描述我正在寻找的文档中发现任何一致的内容。

1 个答案:

答案 0 :(得分:3)

你有另一种选择。您可以编写POCO类,映射类并禁用迁移(迁移还涉及一个名为__MigrationHistory的元数据表,您不会在数据库中拥有该数据库)。

该类可以是(使用属性来映射字段,也可以使用流畅的界面)

class Movie {
    [PrimaryKey]
    [MaxLength(255)
    public string Title {get; set;}
    public datetime ReleaseDate {get; set;}
    public float Price {get; set;} // Or the type you prefere
}

为了禁用迁移和模型检查,我通常在上下文类中设置它(即MyContext类)。

class MyContext : DbContext {

    static MyContext()
    {
        System.Data.Entity.Database.SetInitializer<CloseUpContext>(null); // This disables model checking
    }

    public DbSet<Movie> Movies {get; set;}


}

一个有趣的功能是CodeFirst来自数据库。 EF从数据库开始生成POCO类。类通常需要重构,但仍然比从头编写类更好。