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要求一对一列共享同一主键,并且两者之间有一个引用FK。
如果是这种情况,您可以使用实体框架高级工具CTP1将数据库反向工程为代码优先模型。
你可以在这里找到它:http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d
谢谢大家的帮助。我意识到代码优先不是我应该走的路,我选择了数据库优先的方法。使用实体框架的POCO模板。