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");
}