Dav*_*New 14 .net c# entity-framework entity-framework-5 entity-framework-6
我使用实体框架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; }
}
Run Code Online (Sandbox Code Playgroud)
来电代码:
using(var context = new ReleaseControlContext())
{
var projects = context.Projects.ToList();
}
Run Code Online (Sandbox Code Playgroud)
抛出以下异常:
SqlException:无效的对象名称'dbo.Projects'.
这是因为我的数据库表是Project而不是Projects.我不想将我的上下文重命名DbSet<Project>为"Project",因为这在语义上是不正确的.
题:
我是否必须使用流畅的API /数据注释来在Project数据库表和DbSet<Project> Projects集合之间进行映射?
Ale*_*exC 20
你可以使用
[Table("Project")]
public class Project {
....
}
Run Code Online (Sandbox Code Playgroud)
针对Project实体的注释,或者OnModelCreating(DbModelBuilder modelBuilder)您可以调用modelBuilder.Entity<Project>().ToTable("Project");.
两者都会做同样的事情.
小智 9
你应该定义一个ProjectMap继承自泛类的类(即:),EntityTypeConfiguration(T)这里T是你的Project类.在这个ProjectMap类中,您可以显式定义表映射:
this.ToTable("Project", "dbo");
Run Code Online (Sandbox Code Playgroud)
ProjectMap应该在类的以下方法中调用DbContext该类
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ProjectMap());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21087 次 |
| 最近记录: |