【发布时间】:2012-02-22 21:39:08
【问题描述】:
我的数据库中有两个表,它们具有一对一的关系。我想使用代码优先方法通过 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。我做错了什么?我不敢相信这是实体框架的错误。
【问题讨论】:
-
“Code First”表示您还没有数据存储。 :)
-
@rfmodulator,嗯,是的:)但在现实生活中事情并不那么容易。所以你认为 EF 不是为了我尝试使用它的目的而创建/测试的?
-
同样,“代码优先”意味着您首先定义类,然后框架创建底层数据存储模式。 EF 完全有能力使用现有数据库,我只是指出您所做的不是(!!!)“代码优先。
-
rfmodulator 是正确的 - 在这种情况下,代码优先并不是更好的解决方案。尝试使用模型优先的方法。
-
您实际上可以做@Z_Core 尝试做的事情,但您需要进入迁移:thedatafarm.com/blog/data-access/…
标签: c# entity-framework-4 ef-code-first entity-framework-4.3