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

Manually map POCO to existing Table using Entity Framework

我有一个现有的数据库 table Movie。现在我想写一个 POCO Movie.cs 来映射到那个 table。我想部分控制映射,因为我正在尝试了解有关 EF 的更多信息。

Movie table 有 3 个字段:Title VARCHAR(255,), ReleaseDate DATETIME, Price MONEY。我的 DbContext - 派生的 class 看起来像什么?

来自 Java/Hibernate 背景,我想我只是将 POCO 中的字段映射到 table 中的列,但在 EntityFramework 中似乎并不那么直接.

我好像只找到这两个选项:

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

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

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

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

你还有另一个选择。您可以编写 POCO class、映射 class 并禁用迁移(迁移还涉及一个名为 __MigrationHistory 的元数据 table,您的数据库中没有)。

class可以(使用属性映射字段,也可以使用fluent interface)

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
}

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

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 classes。 类 经常需要重构,但仍然比从头开始编写 class 更好。