我在现有数据库中使用实体框架 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 {
....
}
针对项目实体的注释,或在OnModelCreating(DbModelBuilder modelBuilder)
你可以打电话modelBuilder.Entity<Project>().ToTable("Project");
.
两者都会做同样的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)