【发布时间】:2013-08-30 19:37:41
【问题描述】:
我有 3 个实体:
-
Foo BarUniqueFooBar
Foo 和Bar 是如下实体:
public class Bar {
public int Id {get; set;}
// inverse nav property
public virtual UniqueFooBar UniqueFooBar {get; set;}
}
public class Foo {
public string Name {get; set;}
// inverse nav property
public virtual UniqueFooBar UniqueFooBar {get; set;}
}
而UniqueFooBar 查找如下:
public class UniqueFooBar {
public string FooName {get; set;}
public int BarId {get; set;}
// nav properties
public virtual Foo Foo {get; set;}
public virtual Bar Bar {get; set;}
}
具有以下约束:
-
Foo是独一无二的 - 与
Foo和Bar存在一对一的关系 -
Foo名字是PKfluent API如下:
class UniqueFooBarConfiguration : EntityTypeConfiguration<UniqueFooBar> { public UniqueFooBarConfiguration() { // Define the tablename and schema Map(entity => entity.ToTable("UniqueFooBars")); //// Define non-conventional key HasKey(fooBar => fooBar.FooName); // Define FKs - 1-to-1 HasRequired(fooBar => fooBar.Foo) .WithRequiredPrincipal(foo => foo.UniqueFooBar) .Map(key => key.MapKey("FooName")); HasRequired(fooBar => fooBar.Bar) .WithRequiredPrincipal(bar => bar.UniqueFooBar) .Map(key => key.MapKey("BarId")); // -------------------------------- } }
发生的情况是FooName 被添加到 Foo 表中并且 BarId 被添加到 Bar 表中。
如果在 UniqueFooBar 的流畅 API 配置中,我尝试使用 Foo 的“名称”属性,那么会出现该字段已存在的错误。如果我尝试使用 Bar 的“Id”属性,也会发生同样的情况。
如何配置 UniqueFooBar 以使 FK 与 Foo.Name 和 Bar.Id 成为一对一关系?
更新
-
Foo和Bar都没有UniqueFooBar的约束或要求。 - UniqueFooBar 记录需要
FooName和BarId
这似乎与How to declare one to one relationship using Entity Framework 4 Code First (POCO)不同
【问题讨论】:
-
@PaulZahra 如果您可以总结该已接受答案中的链接,那么我会接受它:blog.bennymichielsen.be/2011/06/02/… 因为附加了赏金,所以复制相关代码会很好地进行一些总结sn-ps。
标签: c# .net entity-framework-5