Entity framework 实体框架代码首先添加额外的外键
我对EF代码优先的方法是完全陌生的,我面临着关于我的表的迁移结果的问题Entity framework 实体框架代码首先添加额外的外键,entity-framework,ef-code-first,foreign-keys,entity-framework-migrations,Entity Framework,Ef Code First,Foreign Keys,Entity Framework Migrations,我对EF代码优先的方法是完全陌生的,我面临着关于我的表的迁移结果的问题Histories 我希望历史记录表具有用户外键(0..*关系:用户可以没有或有多个历史记录): 我正在使用数据注释,但也尝试了OnModelCreating方法,但没有成功 我读了很多帖子,尤其是这篇()但是找不到有效的解决方案 有人能解释一下我做错了什么,错过了什么吗 非常感谢。我终于知道发生了什么事。实际上需要InverseProperty,否则会创建更多的外键,但问题是由于User其他分部类中的此属性造成的: publ
Histories
我希望历史记录
表具有用户
外键(0..*关系:用户可以没有或有多个历史记录):
我正在使用数据注释
,但也尝试了OnModelCreating
方法,但没有成功
我读了很多帖子,尤其是这篇()但是找不到有效的解决方案
有人能解释一下我做错了什么,错过了什么吗
非常感谢。我终于知道发生了什么事。实际上需要
InverseProperty
,否则会创建更多的外键,但问题是由于User
其他分部类中的此属性造成的:
public List<History> History
{
get
{
return Histories.OrderByDescending(h => h.Clock).ThenBy(h => h.Type).ToList();
}
}
公共列表历史记录
{
得到
{
返回history.OrderByDescending(h=>h.Clock).ThenBy(h=>h.Type.ToList();
}
}
添加[NotMapped]
属性起到了作用,并阻止了添加额外的外键。我不知道没有设置
的属性会被视为列,但似乎是这样的情况导致了这个问题。您可以这样使用fluent API:
modelBuilder.Entity<History>().HasRequired(x=> x.User).WithMany(x=> x.Histories).HasForeignKey(x=> x.UserId);
modelBuilder.Entity<User>().HasMany(x=> x.Histories).WithRequired(x=> x.User).HasForeignKey(x=> x.UserId);
modelBuilder.Entity().HasRequired(x=>x.User)。有许多(x=>x.history)。HasForeignKey(x=>x.UserId);
modelBuilder.Entity().HasMany(x=>x.Histories).WithRequired(x=>x.User).HasForeignKey(x=>x.UserId);
没有setter的属性与[NotMapped]
属性具有相同的行为。请尝试删除[InverseProperty(“用户”)]。另一个部分类中有什么?模型和配置看起来不错。尝试重新生成迁移。@tmg:删除InverseProperty
会再添加一个外键(有UserId、User\u Id和User\u Id1)@伊万:我已经删除了数据库,删除了Migrations
文件夹,并添加了migrationinit
。这两个类实际上包含更多的属性,是否有可能涉及其中一个?
public List<History> History
{
get
{
return Histories.OrderByDescending(h => h.Clock).ThenBy(h => h.Type).ToList();
}
}
modelBuilder.Entity<History>().HasRequired(x=> x.User).WithMany(x=> x.Histories).HasForeignKey(x=> x.UserId);
modelBuilder.Entity<User>().HasMany(x=> x.Histories).WithRequired(x=> x.User).HasForeignKey(x=> x.UserId);