创建双向1:0..1关系

时间:2014-03-23 20:41:51

标签: c# entity-framework

我试图从现有数据库创建模型,但我注意到了一个问题。

我有以下表格

User
----------------
<pk> userId
<fk>  profileId

Profile
----------------
<pk> profileId

所以每个用户都有个人资料。

我认为会产生类似这样的东西

public class User
{
   public int userId {get; set;}
   public virtual Profile Profile { get; set; }
}

public class profile
{
   public int profileId {get; set;}
   public virtual User User { get; set; }
}

但相反,个人资料就像这样

public class profile
{
   public int profileId {get; set;}
   public virtual ICollection<User> User { get; set; }
}

实体认为个人资料可以拥有多个用户,因为个人资料没有userId。所以我在用户表的profileId上创建了一个唯一索引(忽略NULL值),但我仍然遇到同样的问题。

如何使用数据库第一种方法在Entity中创建1:0..1关系。

谢谢

1 个答案:

答案 0 :(得分:1)

实体框架不理解用户表的profileId上的唯一键隐式指定1:0..1关系。

如果您真的想要模拟Entity Framework理解的1:0..1关系,那么配置文件表没有理由拥有它自己的密钥。您可以简单地重用用户表中的密钥。在这种情况下,profileId列将成为主键和外键(指向用户表的userId)。您的最终数据库方案将如下所示

User
----
<pk>Id
userName

Profile
----
<pk><fk>UserId
profileName