1

我的数据库中有两个表,它们具有一对一的关系。我想使用代码优先方法通过 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_Id”无效

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

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

4

2 回答 2

0

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

如果是这种情况,您可以使用 Entity Framework Power Tools CTP1 将您的数据库逆向工程为 Code First 模型。

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

于 2012-02-22T22:30:15.590 回答
0

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

于 2012-02-25T14:08:12.057 回答