2016-07-07 53 views
0

我有以下类表映射:EF Codefirst - 用流利的API

public class User 
{   
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public bool Active { get; set; } 
    public string UserName { get; set; }  
    //keys  
    public ICollection<Conversation> Conversations { get; set; } 
} 
public class Conversation 
{   
    public Guid ID { get; set; } 
    public ICollection<Message> Messages { get; set; } 
    public User RecipientUser { get; set; } 
    public User SenderUser { get; set; } 
    public DateTime CreatedDate { get; set; } 
    public DateTime ModifiedDate { get; set; } 
} 

我使用EntityTypeConfiguration用流利的API,它是:

public class UserConfig : EntityTypeConfiguration<User> 
{ 
    public UserConfig() 
    { 
     HasMany(x => x.Conversations).WithRequired(x => x.RecipientUser); 
    } 
} 
public class ConversationConfig : EntityTypeConfiguration<Conversation> 
{ 
    public ConversationConfig() 
    { 
     HasKey(x => x.ID); 
     HasRequired(x => x.RecipientUser).WithMany(x => x.Conversations);     
    } 
} 

这是一个简单的聊天应用程序。如果我现在是用户而不是我是消息的发送者。收件人用户是我正在向我发送信息的用户。 请建议我如何配置我的EntityTypeConfiguration。我遇到如下错误:违反了多重性约束。关系“DataAcessLayer.Conversation_RecipientUser”的角色'Conversation_RecipientUser_Target'具有多重性1或0..1。

回答

0

我更新了我的Conversation类,如下所示:

public class Conversation 
{ 
    public int ID { get; set; } 
    public int SenderUserID { get; set; } 
    public User SenderUser { get; set;} 
    public int RecipientUserID { get; set; } 
    public User RecipientUser { get; set; } 
} 

和删除我UserConfig流利的API。相反,我在ConversationConfig.cs文件添加映射为:

public class ConversationConfig : EntityTypeConfiguration<Conversation> 
{ 
    public ConversationConfig() 
    { 
     HasKey(c => c.ID); 
     HasRequired(c => c.SenderUser).WithMany(u => u.Conversations) 
          .HasForeignKey(c => c.SenderUserID).WillCascadeOnDelete(true); 
     HasRequired(c => c.RecipientUser).WithMany() 
          .HasForeignKey(c => c.RecipientUserID).WillCascadeOnDelete(false);   
    } 
} 

(其中一个外键不具备级联删除,因为这会导致SQL-Server错误:多阶路径)。 它的工作。 感谢您的帮助!

0

删除这部分

HasRequired(x => x.RecipientUser).WithMany(x => x.Conversations); 

从ConversationConfig

+0

对不起,但仍然有错误。 –

+0

我在我的机器上试过了你的代码,我刚刚删除了HasRequired(x => x.RecipientUser).WithMany(x => x.Conversations)部分,因为这在你的UserConfig,HasMany(x => x .Conversations).WithRequired(x => x.RecipientUser)。你只应该声明一次。 –

+0

嗨@Patrick请检查我的答案。谢谢。 –