[英]Initializing Code-First entities from existing database using EntityFramework 6.1.1 in MVC5.2
[英]Code-first: Mapping entities to existing database tables
我使用實體框架6代碼優先與現有數據庫,但在將我的實體映射到數據庫表時遇到問題。
通常,我會使用數據庫優先方法並生成我的實體和上下文代碼,但使用設計器已經成為一個巨大的痛苦。
我已經設置了Database.SetInitializer(null),因為我不希望EF更改我的架構。
數據庫架構:
守則一:
public class Project
{
public int ProjectId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class ReleaseControlContext : DbContext
{
public ReleaseControlContext()
: base(ConfigurationManager.ConnectionStrings["ReleaseControl"].ConnectionString)
{
Database.SetInitializer<ReleaseControlContext>(null);
}
public DbSet<Project> Projects { get; set; }
}
來電代碼:
using(var context = new ReleaseControlContext())
{
var projects = context.Projects.ToList();
}
拋出以下異常:
SqlException:無效的對象名稱'dbo.Projects'。
這是因為我的數據庫表是Project而不是Projects 。 我不想將我的上下文的DbSet<Project>
重命名為“Project”,因為這在語義上是不正確的。
題:
我是否必須使用流暢的API /數據注釋來在Project數據庫表和DbSet<Project> Projects
集合之間進行映射?
你可以使用
[Table("Project")]
public class Project {
....
}
針對Project實體的注釋,或者在OnModelCreating(DbModelBuilder modelBuilder)
您可以調用modelBuilder.Entity<Project>().ToTable("Project");
。
兩者都會做同樣的事情。
您應該定義一個繼承自泛型類EntityTypeConfiguration(T)
的類(即: ProjectMap
),其中T
是您的Project
類。 在此ProjectMap
類中,您可以顯式定義表映射:
this.ToTable("Project", "dbo");
應該在DbContext
類的以下方法中調用ProjectMap
類
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ProjectMap());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.