我有两个系列。父母有很多孩子,但也存储了最新孩子的身份。
public class Foo
{
public int Id { get; set; }
public ICollection<Bar> Bars { get; set; }
public int? CurrentBarId { get; set; }
// adding this causes the error below
public virtual CurrentBar CurrentBar { get; set; }
}
public class Bar
{
public int Id { get; set; }
public int FooId { get; set; }
public virtual Foo Foo { get; set; }
}
当我添加CurrentBarId属性时,所有内容都会被正确保留。但是,当我添加CurrentBar属性时,在创建 Bar 时会抛出异常。
我得到例外:
{"Invalid column name 'Foo_Id'."}
如何在上下文中映射此导航属性?
更新
我已经玩过这一点了,最后得到了:
modelBuilder.Entity<Foo>()
.HasOptional(x => x.CurrentBar)
.WithOptionalDependent()
.Map(map =>
{
map.ToTable("Bar").MapKey("CurrentBarId");
});
现在我收到以下错误。这是正确的方向,或者我应该怎么做呢?
错误3034:映射问题 片段从第213行开始, 442:来自一个EntitySet的实体是 映射到也映射到的行 来自另一个EntitySet的实体 可能不同的关键。确保这些 两个映射片段不映射两个 两个无关的EntitySet 重叠的行组。
答案 0 :(得分:1)
假设Foo.Bars
和Bar.Foo
是同一关系的结尾,CurrentBar
是第二关系的一端,我会尝试这样做:
modelBuilder.Entity<Foo>()
.HasMany(f => f.Bars)
.WithRequired(b => b.Foo)
.HasForeignKey(b => b.FooId)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Foo>()
.HasOptional(f => f.CurrentBar)
.WithMany()
.HasForeignKey(f => f.CurrentBarId)
.WillCascadeOnDelete(false);
这将在CurrentBarId
表中创建一个(可为空)Foos
FK列,在FooId
表中创建一个(不可为空)Bars
FK列。