繁体   English   中英

EF Codefirst-使用流利的API进行表映射

[英]EF Codefirst - table mapping using fluent 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; }
}

我正在使用使用流畅的Api的EntityTypeConfiguration:

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);                   
    }
}

这是一个简单的聊天应用程序。 如果我是currentUser而不是消息的发送者。 接收用户是我向其发送消息的用户。 请建议我如何配置我的EntityTypeConfiguration。 我收到如下错误: 违反多重约束。 关系“ DataAcessLayer.Conversation_RecipientUser”的角色“ Conversation_RecipientUser_Target”的多重性为1或0..1。

删除这部分

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

来自ConversationConfig

我更新了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错误:多个级联路径)。 而且有效。 谢谢您的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM