我知道很多人在EF 4.1上询问一对一关系,但我似乎无法找到此问题的答案。EF 4.1代码优先 - 使用非标准列名称映射一对一关系
我有这些POCO类:
public class Contact
{
public decimal nCont_id { get; set; }
public virtual WebsiteMembership WebsiteMembership { get; set; }
//a bunch of other properties
}
public class WebsiteMembership
{
public int WebsiteMembershipId { get; set; }
public virtual Contact Contact { get; set; }
}
网站会员的主键(WebsiteMembershipId)也是一个外键引用联系人的nCont_id。
我试图设置此使用流利的API:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//This is being done because of the unconventional column names I have to live with
modelBuilder.Conventions.Remove<NavigationPropertyNameForeignKeyDiscoveryConvention>();
//bunch of other stuff
modelBuilder.Entity<Contact>().ToTable("contacts");
modelBuilder.Entity<Contact>().HasKey(b => b.nCont_id);
modelBuilder.Entity<Contact>().HasOptional(b => b.WebsiteMembership).WithRequired(b => b.Contact).Map(b => b.MapKey("WebsiteMembershipId"));
modelBuilder.Entity<WebsiteMembership>().ToTable("WebsiteMembership");
modelBuilder.Entity<WebsiteMembership>().HasKey(b => b.WebsiteMembershipId);
}
,但我得到当我尝试做一个例外:
var websiteMembership = context.WebsiteMemberships.Where(c => c.WebsiteMembershipId == 1645942).FirstOrDefault();
例外:
模式指定无效。错误:(263,6):错误0019:类型中的每个 属性名称必须是唯一的。物业名称 'WebsiteMembershipId'已被定义。
这是否意味着我无法在EF CodeFirst上将外键设置为相同的主键?或者我在这里做错了什么?如果主键与外键不是同一列,它会起作用吗?
建议非常感谢!
优秀的解释!非常感谢你一切正常。我以前试过上面这段代码,但是因为我的字段是'int'而不是'decimal',EF正在寻找Contact_nCont_id字段。然后我使用了你的代码片段并制作了“decimal”属性,一切都很好用。 –