在扩展类中为ASP.NET MVC和EF添加注释

问题描述 投票:0回答:1

我在数据库设计中犯了一个关键错误:我有一个表(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]似乎是首选方法。

c# asp.net-mvc ado.net-entity-data-model
1个回答
0
投票

PK不必总是被命名为ID。奇怪的是,从一开始它本身就无法正确生成,如果您确定将其设置为DB中的主键。您正在使用什么来生成模型类?

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.