我正在使用.NET Framework 4.5.1和C#开发和实体框架代码第一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
属性设置消息&#39;发件人。我也可以使用GroupId
和FromGroup
执行相同操作。
但是,如果我想设置用户的收件人,我必须设置Users' class
个实例,但我无法使用用户&#39; IDS。
我该怎么做?
我的问题是,我不知道如何告诉E.F.那些ID是Recipients
&#39;像我对Sender
和UserId
所做的外键:
HasRequired(m => m.Sender).
WithMany(u => u.MessagesSent).
HasForeignKey(m => m.UserId).
WillCascadeOnDelete(false);
我想在Message
类创建一个新属性:
public ICollection<int> RecipientsId;
因为我想创建一个新的邮件类实例,并使用用户ID设置收件人。
我不知道如何修改EntityTypeConfiguration以告诉E.F.新的ICollection<int> RecipientsId
属性具有ICollection<User> Recipients
的外键。
注意:我将在ASP.NET Web API 2服务上使用此库,并且我希望将int
值作为收件人发送,而不是发送{{ 1}}实例。
答案 0 :(得分:0)
Recipients.Select(x => x.UserId)
将返回一个int值列表。如果你想在模型上使用它,那么只需创建一个属性,如下所示。
IEnumerable<int> RecipientIds
{
get
{
return Recipients.Select(x => x.UserId);
}
}
由于此属性只有一个getter,因此不应尝试将其映射到数据库字段。
答案 1 :(得分:0)
我尝试了几个小时后,传递int
无法完成,或者你可以通过FindBy UserId添加用户
var user = context.Users.Find(UserId);
msg.UserReceipts.Add(User);
ps:对不起我在上一篇文章中的错误。