我正在使用.NET Framework4.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属性设置消息的发件人。我也可以对GroupId和FromGroup做同样的事情。
但是,如果我想设置用户的收件人,我必须设置Users' class实例,但我不能使用用户的ids。
我怎么能这么做?
我的问题是我不知道如何告诉E.F.那些I是Recipients的外键,就像我和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 2服务上使用这个库,我希望将int值作为收件人发送,而不是发送User实例。
发布于 2014-09-05 09:59:25
Recipients.Select(x => x.UserId)将返回int值的列表。如果您希望在模型上这样做,那么只需创建一个属性如下所示。
IEnumerable<int> RecipientIds
{
get
{
return Recipients.Select(x => x.UserId);
}
}由于此属性仅具有getter,因此EF不应尝试将其映射到DB字段。
发布于 2014-09-05 11:13:30
在我尝试了几个小时之后,传递int无法完成,或者您可以通过FindBy UserId添加用户
var user = context.Users.Find(UserId);
msg.UserReceipts.Add(User);ps:对不起,我在前一篇文章中错了。
https://stackoverflow.com/questions/25682841
复制相似问题