C# EF 4.3使用现有数据库时编码第一个一对一关系

C# EF 4.3使用现有数据库时编码第一个一对一关系,c#,entity-framework-4,ef-code-first,entity-framework-4.3,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 Profil

我的数据库中有两个表,它们具有一对一的关系。我想使用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();
modelBuilder.Entity().HasKey(x=>x.UserId);
modelBuilder.Entity()。
has可选(u=>u.Profile)。
with required();
但是,当我运行应用程序时,在尝试访问用户表时会出现以下异常:

无效的列名“用户Id”

虽然当我让EF用这两个表自己创建一个新的数据库时,它创建了一个与我的结构相同的数据库,并且工作正常


我当时使用的是EF4.3(我也试过4.2)和MS SQL 2008。我做错了什么?我不敢相信这是实体框架的一个缺陷。

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

如果是这种情况,您可以使用Entity Framework Power Tools CTP1将数据库作为代码优先模型进行反向工程


你们可以在这里找到:

谢谢你们,伙计们,谢谢你们的帮助。我意识到代码优先不是我应该走的路,我选择了数据库优先的方法

“代码优先”表示您还没有数据存储。:)@好吧,是的:)但在现实生活中事情并不那么容易。那么您认为EF的创建/测试并不是为了我试图使用它吗?同样,“代码优先”意味着您首先定义类,然后框架创建底层数据存储模式。EF完全能够使用现有数据库,我只是指出您所做的不是(!!!)“Code First.rfmodulator是正确的-在这种情况下,Code First不是更好的解决方案。尝试使用模型优先的方法。您实际上可以做@Z_Core试图做的事情,但您需要进入迁移: