簡體   English   中英

設置ICollection <int> 屬性作為ICollection的外鍵 <User> 在EntityTypeConfiguration類中

[英]Set ICollection<int> property as Foreign Keys to ICollection<User> in EntityTypeConfiguration class

我正在使用.NET Framework 4.5.1和C#開發Entity Framework Code First 6.1.0庫。

我有這個課:

public class Message
{
    public int MessageId { get; set; }
    public string Body { get; set; }
    public DateTime DateSent { get; set; }

    public Nullable<int> GroupId { get; set; }
    public Group FromGroup { get; set; }

    public int UserId { get; set; }
    public User Sender { get; set; }

    public ICollection<User> Recipients { get; set; }
}

使用此配置類:

public class MessageConfiguration : EntityTypeConfiguration<Message>
{
    public MessageConfiguration()
    {
        ToTable("Message");

        Property(m => m.Body).IsRequired();
        Property(m => m.Body).IsMaxLength();

        Property(m => m.DateSent).IsRequired();

        HasOptional(m => m.FromGroup).
            WithMany(g => g.Messages).
            HasForeignKey(m => m.GroupId);

        HasRequired(m => m.Sender).
            WithMany(u => u.MessagesSent).
            HasForeignKey(m => m.UserId).
            WillCascadeOnDelete(false);

        HasMany(r => r.Recipients).
            WithMany(m => m.MessagesReceived).
            Map(mr =>
            {
                mr.ToTable("MessageRecipient");
                mr.MapLeftKey("MessageId");
                mr.MapRightKey("UserId");
            });
    }
}

如您所見,如果我創建一個新的Message類實例 ,則可以使用UserIdSender屬性來設置消息的發送者。 我也可以對GroupIdFromGroup進行同樣的FromGroup

但是,如果要設置用戶的收件人,則必須設置Users' class實例,但不能使用用戶的ID。

我怎樣才能做到這一點?

我的問題是,我不知道如何像那些SenderUserId那樣告訴EF這些ID是Recipients的外鍵:

HasRequired(m => m.Sender).
WithMany(u => u.MessagesSent).
HasForeignKey(m => m.UserId).
WillCascadeOnDelete(false);

我想在Message類上創建一個新屬性:

public ICollection<int> RecipientsId;

因為我想創建一個新的消息類實例,並使用用戶的ID設置其收件人。

我不知道如何修改EntityTypeConfiguration來告訴EF新的ICollection<int> RecipientsId屬性具有ICollection<User> Recipients的外鍵。

注意 :我將在ASP.NET Web API 2服務上使用此庫,我想將int值作為收件人發送,而不是發送User實例。

Recipients.Select(x => x.UserId)將返回一個int值列表。 如果您希望在模型上使用此屬性,則只需創建如下的屬性。

IEnumerable<int> RecipientIds
{
    get
    {
        return Recipients.Select(x => x.UserId);
    }
}

由於該屬性只有一個吸氣劑,因此EF不應嘗試將其映射到數據庫字段。

我嘗試了幾個小時后,無法完成傳遞int操作,也可以通過FindBy UserId添加用戶

var user = context.Users.Find(UserId);
msg.UserReceipts.Add(User);

ps:對不起我在上一篇文章中的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM