【发布时间】:2013-11-27 13:27:53
【问题描述】:
我在现有数据库中使用 Entity Framework 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 集合之间进行映射?
【问题讨论】:
-
我想知道为什么它不起作用;该表必须称为 Projects soemthing going wrong 但正如您所说,您可以使用数据注释来强制名称 [Table("Projects")]。
-
在创建 DBContext 之前尝试调用初始化程序;把它放在外面的某个地方。
标签: c# .net entity-framework entity-framework-5 entity-framework-6