C# Fluent hHibernate一对多设置值为空

C# Fluent hHibernate一对多设置值为空,c#,nhibernate,fluent-nhibernate,nancy,C#,Nhibernate,Fluent Nhibernate,Nancy,首先,很抱歉我的英语不好 我有以下实体 public class User { public virtual int Id { get; set; } public virtual Application Application { get; set; } public User () { Application = new Application (); } } 用户地图 public class UserMap : ClassM

首先,很抱歉我的英语不好

我有以下实体

public  class User
{
    public virtual int Id { get; set; }

    public virtual Application Application { get; set; }


    public User ()
    {
     Application = new Application ();
    }

}
用户地图

 public class UserMap : ClassMap<User>
{
    public UserMap ()
    {
        Table ("Users");
        Id (p => p.Id);
        References (x => x.Application).Cascade.SaveUpdate ();


    }
}
应用程序地图

 public ApplicationMap ()
    {
        Table ("Applications");
        Id (x => x.Id);
        Map (x => x.ApplicationName);

    }
我收到了这个json

{

"Application": 1,

}
并以这种方式保存对象

                    var user = new User();

                    user.Application.Id = Cast.To<int>(userModel.Application);

                    userService.Add(user);
                    userService.Commit();
正确记录用户表中的数据,但保留为空,即ApplicationName表字段应用程序

public class Application
{
    public virtual int Id { get; set; }

    public virtual string ApplicationName { get; set; }

}
我认为错误在这一行user.Application.Id=Cast.To userModel.Application; 因为我没有设置ApplicationName字段 但是,如果我将id作为参数获取,我将需要按id获取应用程序对象,并分配用户对象?。
非常感谢

您说得对,从ID转换为实体应用程序需要调用数据层及其操作GetById

session.Loadid 在我们可以确定传递的应用程序ID存在的情况下,NHibernate有一种专门的方法来将ID转换为其实体。这是一种加载方法,它不会命中DB,只创建一个具有提供ID的代理,操作将成功:

var user = new User();

var applicationId = Cast.To<int>(userModel.Application);

//                behind is session.Load<Aplication>(applicaitonId)
var application = applicationService.Load(applicationId);

user.Application = application;
userService.Add(user);
层叠为新的。 以防我们收到全新的物品

{
  "Application": { "ApplicaitonName" : ... }
}
我们可以创建一个,由于上面的级联设置,它也可以工作

user.Application = new Appliation 
{ 
  ApplicationName = ...,
}

对我知道;享受快乐
user.Application = new Appliation 
{ 
  ApplicationName = ...,
}