我的Nhibernate应用程序有问题。 我有一个名为Rozmiar的课程,以及名为Symbol的课程。 符号包含List作为属性。
如何使用NHibernate将其保存到数据库中?
我的代码(无法正常工作):
符号类:
public class Symbol
{
public virtual int Id { get; set; }
public virtual string Nazwa { get; set; }
public virtual bool Sitodruk { get; set; }
public virtual List<Rozmiar> Rozmiar { get; set; }
public Symbol() { }
public Symbol(string nazwa, List<Rozmiar> lista)
{
using (ISession sesja = Program.baza.SessionFactory.OpenSession())
{
using (ITransaction transaction = sesja.BeginTransaction())
{
Symbol s = new Symbol();
s.Nazwa = nazwa;
s.Rozmiar = lista;
sesja.Save(s);
transaction.Commit();
}
}
}
}
ROZMIAR CLASS:
public class Rozmiar
{
public virtual int Id { get; set; }
public virtual string Nazwa { get; set; }
public Rozmiar() { }
public Rozmiar(string nazwa)
{
using (ISession sesja = Program.baza.SessionFactory.OpenSession())
{
using (ITransaction transaction = sesja.BeginTransaction())
{
Rozmiar r = new Rozmiar();
r.Nazwa = nazwa;
sesja.Save(r);
transaction.Commit();
}
}
}
}
MAP:
public class RozmiarMap : ClassMap<Rozmiar>
{
public RozmiarMap()
{
Table("Rozmiar");
SchemaAction.All();
Id(x => x.Id).GeneratedBy.Identity();
Map(X => X.Nazwa).Not.Nullable();
}
}
public class SymbolMap : ClassMap<Symbol>
{
public SymbolMap()
{
Table("Symbol");
SchemaAction.All();
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Nazwa).Not.Nullable();
HasMany(x => x.Rozmiar).KeyColumn("IdRozmiar");
}
}
生成样本对象的方法:
public static void Generuj()
{
List<Rozmiar> listA = new List<Rozmiar>();
listA.Add(new Rozmiar("750 mm"));
listA.Add(new Rozmiar("900 mm"));
listA.Add(new Rozmiar("1050 mm"));
listA.Add(new Rozmiar("1200 mm"));
Symbol a1 = new Symbol("A-1", listA);
Symbol a2 = new Symbol("A-2", listA);
Symbol a3 = new Symbol("A-3", listA);
}
在调试模式中,我看到,listA包含4个对象,但这些对象的属性为Id = 0和Nazwa = null :(可能存在一个主要问题......
我也不知道,如果我的映射设置正确。
顺便说一句。连接设置和配置都可以,因为我在此代码中有其他类,并且它可以正确保存到数据库中。
答案 0 :(得分:1)
在带有字符串参数的Rozmiar
构造函数中,您正在创建new
的不同(Rozmiar
)实例。因此,当您添加到由
listA
实例时
new Rozmiar("750 mm")
持久化是不同的对象
Rozmiar r = new Rozmiar();
另外,将您的映射从List<Rozmiar>
更改为IList<Rozmiar>
。请参阅此处:6.1. Persistent Collections集合映射支持的接口的完整列表