EF 4.3使用现有数据库时,代码优先的一对一关系

本文关键字:代码 关系 一对一 数据库 EF | 更新日期: 2023-09-27 18:25:24

我的数据库中有两个表,它们有一对一的关系。我想用EF使用代码优先的方法访问它们。我写了这样的POCO类:

public class User
{
    public int Id { get; set; }
    public string Login { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
    public virtual Profile Profile { get; set; }
}
public class Profile
{
    public int UserId { get; set; }
    public string FullName { get; set; }
    public DateTime? Birthday { get; set; }
    public bool? Male { get; set; }
}

我还在OnModelCreating中描述了这些类之间的关系,如下所述。看起来就是这样:

modelBuilder.Entity<Profile>().HasKey(x => x.UserId);
modelBuilder.Entity<User>().
    HasOptional(u => u.Profile).
    WithRequired();

但是当我运行应用程序时,我在尝试访问User表时遇到了这个异常:

列名"User_Id"无效

尽管当我让EF用这两个表自己创建一个新的数据库时,它创建的数据库具有与我相同的结构,并且它可以工作。

我使用的是EF 4.3(我也尝试过4.2)和MS SQL 2008。我做错了什么?我不敢相信这是实体框架的一个bug。

EF 4.3使用现有数据库时,代码优先的一对一关系

EF要求一对一列共享同一主键,并且两者之间有一个引用FK。

如果是这种情况,您可以使用实体框架高级工具CTP1将数据库反向工程为代码优先模型。

你可以在这里找到它:http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

谢谢大家的帮助。我意识到代码优先不是我应该走的路,我选择了数据库优先的方法。使用实体框架的POCO模板。