当我保存我的对象时,除了外键字段外,所有保存好的。 我的模特:
public class Persons{
public virtual string Name { get; set; }
public virtual string Password { get; set; }
public virtual int Id { get; set; }
}
public class Notes{
public virtual int Id { get; set; }
public virtual Persons Owner { get; set; }
public virtual string Head { get; set; }
public virtual string Text { get; set; }
}
我的映射:
public class PersonsMap : ClassMap<Persons>{
public PersonsMap(){
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Password);
Table("Persons");
}
}
public class NotesMap: ClassMap<Notes>{
public NotesMap(){
Id(x => x.Id);
Map(x => x.Head);
Map(x => x.Text);
HasOne(x => x.Owner);
Table("Notes");
}
}
我的代码:
public void CreateNote(int id, Notes note){
using (var session = NHibernateHelper.OpenSession()){
using (var transaction = session.BeginTransaction()){
note.Owner = session.QueryOver<Persons>().Where(x => x.Id ==
id).SingleOrDefault(); // note.Owner = {Id = 1; Name = "Name";
// Password = "Password"}
session.Save(note);
transaction.Commit();
}
}
}
操作结果是成功但是:
Id为2,Owner为null,Head为“Some head”,Text为“Some text”
为什么所有者为空?我做错了什么?
答案 0 :(得分:0)
我认为你的映射是不正确的。笔记与人之间的关系不是一对一的。他们不共享主键。
http://www.jagregory.com/writings/i-think-you-mean-a-many-to-one-sir/
public class NotesMap: ClassMap<Notes>{
public NotesMap(){
Id(x => x.Id);
Map(x => x.Head);
Map(x => x.Text);
References(x => x.Owner)
.Cascade.SaveUpdate();
Table("Notes");
}
}
此外,当您只需要设置关系时,您不需要在知道id时实际查询数据库。使用session.Load保存查询。
note.Owner = session.Load<Persons>(id);