3
B和C之间
public class A  
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public virtual int Aid { get; set; }  

    public virtual ICollection<B> B { get; set; }  
} 


public class B 
{  
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]  
    public virtual int Bid { get; set; } 

    [Key] 
    [Column(Order = 0)] 
    [Required]   
    Public virtual string BName {get ; set} 

    [Key] 
    [Column(Order = 1)] 
    [Required]  
    public virtual int Aid { get; set; } 

    [ForeignKey("Aid")] 
    public virtual A A { get; set; } 

    public virtual ICollection<C> C { get; set; }  
} 


public class C 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]  
    public virtual int Cid { get; set; } 

    [Key] 
    [Column(Order = 0)] 
    [Required]  
    Public virtual string CName {get ; set}  

    [Key] 
    [Column(Order = 1)] 
    [Required]   
    public virtual int Bid { get; set; } 

    [ForeignKey("Bid")] 
    public virtual B B { get; set; } 
} 

关系困扰我.I不希望包括如BNAME在C类外键映射外键在EF代码第一非主代理键柱

错误:数在从属和主要角色的属性 有关系的约束必须相同

我理解的错误,但我想指出C级只能通过投标,我怎么能实现它,而不会干扰A之间的关系和B.

回答

2

据我的理解是不可能无论使用哪种属性或流畅API做的EF代码第一:

但我可以建议你改造一下你的解决方案 - 不要在上创建主键- 使其成为唯一索引 - Unique Key constraints for multiple columns in Entity Framework

public class B 
{  
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]  
    public virtual int Bid { get; set; } 

    [Index("IX_B_Name_Aid", 1, IsUnique = true)] 
    [Required]   
    Public virtual string BName {get ; set} 

    [Index("IX_B_Name_Aid", 2, IsUnique = true)] 
    [Required]  
    public virtual int Aid { get; set; } 

    [ForeignKey("Aid")] 
    public virtual A A { get; set; } 

    public virtual ICollection<C> C { get; set; }  
} 


public class C 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]  
    public virtual int Cid { get; set; } 

    [Key] 
    [Column(Order = 0)] 
    [Required]  
    Public virtual string CName {get ; set}  

    [Key] 
    [Column(Order = 1)] 
    [Required]   
    public virtual int Bid { get; set; } 

    [ForeignKey("Bid")] 
    public virtual B B { get; set; } 
} 

索引会给你同样的性能优势的查询作为主键(虽然有点额外的开销,以支持主surrogate指数在Bid列)。

另外,推荐阅读 - Surrogate vs. natural/business keys