我有3個實體:如何與現有字段建立一對一關係?
Foo
Bar
UniqueFooBar
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
名稱是PKT他流利的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
被添加托特他吧桌。
如果在流利的API配置UniqueFooBar
中,我嘗試使用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)
的可能重複(http://stackoverflow.com/questions/3622572/how-to-declare-one-to- [如何使用實體框架4代碼優先(POCO)申報一對一的關係] one-relationship-using-entity-framework-4-code-first-poco) – User
你看過http://stackoverflow.com/questions/15549680/how-do-i-establish-a-one-to-one- relationship-with-entity-framework-code-first? –
@PaulZahra如果您可以總結該接受答案中的鏈接,那麼我會接受它:http://blog.bennymichielsen.be/2011/06/02/entity-framework-4-1-one-to-one -mapping/ 因爲附加了賞金,所以有一點總結會對複製相關的代碼片段很好。 – IAbstract