C#MVC是否使用1次保存保存父级和子级?
我的映射:C#MVC是否使用1次保存保存父级和子级?,c#,asp.net-mvc,nhibernate,model,C#,Asp.net Mvc,Nhibernate,Model,我的映射: public class MessageMap : ClassMap<Message> { public MessageMap() { Table("[Messages]"); Id(x => x.Id).Column("id"); References(x => x.From).Column("user_id"); Map(x => x.Subject).Column("
public class MessageMap : ClassMap<Message>
{
public MessageMap()
{
Table("[Messages]");
Id(x => x.Id).Column("id");
References(x => x.From).Column("user_id");
Map(x => x.Subject).Column("subject");
Map(x => x.Body).Column("body");
Map(x => x.DateSent).Column("date_sent");
HasMany(x => x.Recipients).KeyColumn("message_id").AsBag().LazyLoad().Cascade.AllDeleteOrphan();
}
}
public class MessageRecipientMap : ClassMap<MessageRecipient>
{
public MessageRecipientMap()
{
Table("[MessageRecipients]");
Id(x => x.Id).Column("id");
References(x => x.To).Column("user_id");
References(x => x.Message).Column("message_id");
Map(x => x.IsRead).Column("is_read");
Map(x => x.DateRead).Column("date_read");
}
}
我的问题:
当我在控制器中的方法中保存时,对于MessageRecipients
,它始终为空。我真的必须先保存消息,然后再分配它吗。看起来工作太多了。因此,让我来发布这条消息,似乎工作量较小。单击以获取答案,因为这对我很有效。这也使用了相反的设置。单击以获得答案,因为这对我很有效。这也使用了反向设置。您的意思是此行(message.Recipients.Add(messageRecipient);)给出了空引用异常,还是说没有在数据库中创建收件人?您的意思是此行(message.Recipients.Add(messageRecipient);)是否提供空引用异常,或者您的意思是没有在数据库中创建收件人?
public class Message : IEntity
{
public virtual Guid Id { get; set; }
public virtual User From { get; set; }
public virtual string Subject { get; set; }
public virtual string Body { get; set; }
public virtual DateTime DateSent { get; set; }
public virtual IList<MessageRecipient> Recipients { get; set; }
public Message()
{
Recipients = new List<MessageRecipient>();
}
}
public class MessageRecipient : IEntity
{
public virtual Guid Id { get; set; }
public virtual User To { get; set; }
public virtual bool IsRead { get; set; }
public virtual DateTime DateRead { get; set; }
public virtual Message Message { get; set; }
}
public class MessageModel
{
[Required]
public virtual Message Message { get; set; }
public virtual IList<MessageRecipient> MessageRecipients { get; set; }
public virtual string RecipientIds { get; set; }
public virtual IList<UserLiteModel> AllowedMailingList { get; set; }
}
public ActionResult Create(MessageModel model)
{
var user = GetPrincipalUser();
var sentDate = DateTime.Now;
var message = new Message
{
From = user,
DateSent = sentDate
};
var toUserIds = model.RecipientIds.Split(',').ToList();
foreach (var uId in toUserIds)
{
var uGuid = Guid.Parse(uId);
var messageRecipient = new MessageRecipient
{
To = _userService.Get(uGuid),
IsRead = false,
DateRead = sentDate
};
message.Recipients.Add(messageRecipient);
}
_messageService.Save(message);
return RedirectToAction("Index");
}