我的数据库中有两个表,它们具有一对一的关系。我想使用代码优先方法使用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.我做错了什么?我无法相信它是实体框架的一个错误。
答案 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.