EF 4.3 Code使用现有数据库时的第一个一对一关系

时间:2012-02-22 21:39:09

标签: c# entity-framework-4 ef-code-first entity-framework-4.3

我的数据库中有两个表,它们具有一对一的关系。我想使用代码优先方法使用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中描述了这些类之间的关系,如here所述。这就是外观:

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.我做错了什么?我无法相信它是实体框架的一个错误。

2 个答案:

答案 0 :(得分:0)

EF要求一对一列共享相同的主键,并且两者之间存在参考FK。

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

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

答案 1 :(得分:0)

谢谢你们,帮助你们。我意识到代码首先不是我应该去的方式,我选择了数据库第一种方法。 With the POCO templates for the Entity Framework.