2013-02-25 107 views
3

我有两个类EF代码第一:主键相同外键

public class Product 
{ 
    public Guid Id { get; set; } 
    public string ProductDetails { get; set; } 
} 

public class SpecialProductDetails 
{ 
    public Guid Product_Id { get; set; } // PK and FK to Product class 
    public string SpecialName { get; set; } 
    public string SpecialDescription { get; set; } 

    public virtual Product Product { get; set; } 
} 

SpecialProductDetails映射1-1 Product类是可选的。它共享相同的PrimaryKey和ForeignKey。

用流利的API我正在这样的映射这一关系(内SpecialProductDetails

public SpecialProductDetails() 
{ 
    HasKey(p => p.Product_Id); 
    HasRequired(p => p.Product).WithMany().HasForeignKey(p => p.Product_Id).WillCascadeDelete(true); 
} 

这使我试图生成数据库时,此错误

\ tSystem.Data.Entity.Edm.EdmAssociationEnd ::多重性在'SpecialProductDetails_Product_Source'关系中的'SpecialProductDetails_Product_Source'角色中无效。由于依赖角色是指关键属性,所以依赖角色的多重性的上界必须是'1'。

如何在EF代码优先上将一列设置为PK和FK?

+0

看看这篇文章:http://blog.bennymichielsen.be/2011/06/02/entity-framework-4-1-one-to-one-mapping/ – MarcinJuraszek 2013-02-25 07:19:41

+0

@lc如果我使用.WithOptional(),我怎么才能指定FK? – Catalin 2013-02-25 07:22:17

回答

6

我敢肯定你已经解决了,但我打了同样的问题,我找到了解决办法是:

public SpecialProductDetails() 
    { 
     HasKey(p => p.Product_Id); 
     HasRequired(p => p.Product).WithOptional(); 
    } 

“它值得注意的是,当我们映射一个一对一我们不需要像使用HasForeignKey方法映射一对多关联时那样指定外键,因为EF只支持主键上的一对一关联,它会自动创建主键上数据库中的关系。“

http://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-3-shared-primary-key-associations

+0

是的,在一对一的关系中,我不需要指定'FK',因为它已经被认为是'PK' – Catalin 2015-02-09 07:11:52

+0

伟大的工作,我会给你更多的积分,如果我可以的话。 – 2015-11-26 21:48:29