2013-03-21 85 views
5

我一直在阅读关于在EF中建立一对一关系的人的所有Google和SO页面,但它对我而言不起作用。如何建立与实体框架代码的第一对一关系

这里是我的模型:

帐户:

public int Id {get; set;} 
public virtual AccountConfig AccountConfig {get; set;} 

账户地图:

HasKey(t => t.Id); 
HasRequired(t => t.AccountConfig) 
    .WithOptional(); 

帐户配置:

public int Id {get; set;} 
public int AccountId {get; set;} 
public virtual Account Account {get; set;} 

帐户配置地图:

HasKey(t => t.Id); 
HasRequired(t => t.Account) 
    .WithOptional(t => t.AccountConfig); 

执行时,AccountConfig财产上AccountNULLAccount财产上AccountConfig是不正确的记录(巧合的是,检索Account.Id是一样的AccountConfig.Id,但我不知道这意味着什么)。

在数据库中,Account表没有到AccountConfig记录的引用,但AccountConfig表必须使用AccountIdAccount记录的引用。

最终的结果将是对我从AccountAccountConfig具有到AccountConfig基准和(如果可能),以Account的参考。

回答

9

使用EF,一对一关系仅在共享主键的表上受支持。您的AccountConfig表具有自己的主键和Account的外键。 EF仅支持与此配置的一对多关系。

This article对EF中的1:1和1:0..1关系有很好的解释。这里的限制是EF doesn't yet support unique constraints的事实的副产品。

+0

所以我只能从帐户引用AccountConfig表,如果帐户表有一个名为AccountConfigId的列? – jermny 2013-03-21 14:10:55

+0

不完全。你的'AccountConfig'实体应该只有一个'Id'列;删除'AccountId'列并确保'Id'不是自动生成的。当添加'AccountConfig'实体时,他们的'Id's应该明确地设置为与'Account'表记录的'Id'相同。 – Olly 2013-03-21 14:14:54

+0

请参阅我链接的文章,其中的示例与您的示例非常相似。 – Olly 2013-03-21 14:15:34

相关问题