我有一个现有的数据库表Movie
。现在我想写一个POCO Movie.cs
,它将映射到该表。我想部分控制映射,因为我试图了解有关EF的更多信息。
Movie
表有3个字段:Title VARCHAR(255,), ReleaseDate DATETIME, Price MONEY
。我的DbContext派生类对此会是什么样的?
来自Java / Hibernate背景,我想我只会将POCO中的字段映射到表格中的cols,但它在EntityFramework中似乎并不是那么直接。
我似乎只找到了这两个选项:
" Code First" - >用C#编写所有内容,然后让EntityFramework生成并运行迁移,以不断更新和播种数据库。
"数据库优先" - >创建数据库,然后在VS中创建一个数据库项目并生成一个EDMX文件,为您生成POCO
对于将单个POCO映射到单个表的目标,两者似乎过于迟钝。我错过了什么?我已经听说过" Fluent API,"但这似乎让我回到了1或2。
我努力在描述我正在寻找的文档中发现任何一致的内容。
答案 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类。类通常需要重构,但仍然比从头编写类更好。