![](/img/trans.png)
[英]How to set a property in Powershell on an instance of a class that implements IDictionary and ICollection
[英]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
類實例 ,則可以使用UserId
或Sender
屬性來設置消息的發送者。 我也可以對GroupId
和FromGroup
進行同樣的FromGroup
。
但是,如果要設置用戶的收件人,則必須設置Users' class
實例,但不能使用用戶的ID。
我怎樣才能做到這一點?
我的問題是,我不知道如何像那些Sender
和UserId
那樣告訴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.