每次我需要更新我的模型时,我都可以自己解决这个问题..但这很烦人,我确实做了些什么来给自己造成这种痛苦。
每次我更新包含这些实体的上下文的模型(添加 - 迁移)时,我必须首先注释掉我在主键上注释[HiddenInput(DisplayValue = false)]的所有地方。然后我添加迁移..更新数据库..然后最后我必须返回并再次取消注释所有HiddenInput,以实际获得我想要的GUI行为。
这个HiddenInput实际上并没有影响代码的运行版本......如果它存在与否,EntityFramework仍然认为它正在连接到相同的数据库模式,并且无论如何都可以正常工作。这就像我认为的那样。
我不明白为什么我必须删除HiddenInput才能执行add-migration / update-database步骤。我不明白。
一个例子......
public class ET_APIKeyErrors
{
[Key]
/*mvc*/[HiddenInput(DisplayValue = false)]
public long apiKeyErrorId { get; set; }
public String errorAction { get; set; }
public String errorResponse { get; set; }
public String errorCode { get; set; }
#region subitems
public virtual ET_APIKey apiKey { get; set; }
#endregion subitems
}
在使用添加迁移之前,我必须将/ mvc /更改为// mvc 然后我是一个add-migration和update-database 之后我再次用/ mvc 替换所有// mvc。
如果我忘记了这一步,我会很快被提醒我从模型生成中得到的错误......
One or more validation errors were detected during model generation:
App.ET_APIKey: : EntityType 'ET_APIKey' has no key defined. Define the key for this EntityType.
APIKeys: EntityType: EntitySet 'APIKeys' is based on type 'ET_APIKey' that has no keys defined.