我在数据库设计中犯了一个关键错误:我有一个表(Divisions
),其PK为DivID
(而不是仅ID
)。我正在使用Entity Framework v6.0创建ASP.NET MVC应用程序,但收到一个错误消息,我的实体类型Division
没有定义键。
[在EMDX设计器中,当我查看该字段的属性时,确实显示Key
为真,但是生成的实际Division
类不包含[Key]
属性。
我可以将其与using System.ComponentModel.Annotations;
一起添加,但是当我重新生成模型时,我必须进入并再次添加这些行。我正在尝试使用扩展类来解决问题:
[MetadataType(typeof(Division_Validation))]
public partial class Divison
{
}
[Bind(Include="DivID")]
public partial class Division_Validation
{
[Key]
public int DivID { get; set; }
}
发现here。但这是行不通的。我猜测[Key]
由于某种原因无法以这种方式定义。
除了重命名数据库中的字段之外,还有什么方法可以解决我的问题?
我已尝试自定义映射,以使Entity对象具有ID
而不是DivID
,但这会引发错误,指示该模型与数据库已过时,并且需要使用代码先迁移。 。 。听起来好像它实际上将要更新不需要的数据库,因为现有的桌面应用程序正在使用它,并且要求它不要这样更新。
更新
我完全删除了模型,包括web.config连接字符串设置,然后重新添加了模型。这次,我在添加模型后直接设置了自定义映射(从数据库侧将DivID
映射到ID
](在实体方面),并且效果很好。我假设这是预期的工作流程,但如果有一种方法可以使MetadataType
注释起作用,则[Key]
似乎是首选方法。
PK不必总是被命名为ID。奇怪的是,从一开始它本身就无法正确生成,如果您确定将其设置为DB中的主键。您正在使用什么来生成模型类?