我想将一些对象存储在每个 Foo 正好有一个 Bar 的地方。
我有一些看起来像这样的 POCO 对象:
public class Foo
{
public int Id { get; set; }
public string FooProperty { get; set; }
public int BarId { get; set; }
public virtual Bar Bar { get; set; }
}
public class Bar
{
public int Id { get; set; }
public string BarProperty { get; set; }
public int FooId { get; set; }
public virtual Foo Foo { get; set; }
}
Foo 和 Bar 具有 1:1 的关系,根据我所做的阅读,我在 DbContext 类中尝试了以下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
modelBuilder.Entity<Foo>()
.HasRequired(x => x.Bar)
.WithRequiredPrincipal(x => x.Foo);
base.OnModelCreating(modelBuilder);
}
后备存储是 SQL Server,这确实为我创建了具有 1:1 关系的表。但是,从Bar
to的 FK 关系Foo
在两个表的Id
字段上,而我希望它是从表的FooId
字段到表的字段。Bar
Id
Foo
似乎 EF 已决定使两个表的 PK (Id) 字段保持同步,并且基本上忽略了我的BarId
/FooId
列。
我究竟做错了什么?