繁体   English   中英

NHibernate:使用列表保存Object1 <Object2> 进入数据库

[英]NHibernate: Save Object1 with List<Object2> into database

我的Nhibernate应用出现问题。 我有一个名为Rozmiar的课程,一个名为Symbol的课程。 符号包含列表作为属性。

如何使用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();
            }
        }
    }
}

罗兹米尔课程:

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

地图:

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个对象,但是这些对象的属性ale Id = 0和Nazwa = null :(也许有一个主要问题...

我也不知道我的映射设置是否正确。

BTW。 连接设置和配置都可以,因为我在此代码中还有其他类,并且可以正确保存到数据库中。

在具有字符串参数的Rozmiar的构造函数中,您正在创建Rozmiar不同( new )实例。 因此,当您添加到listA

new Rozmiar("750 mm")

坚持是不同的对象

Rozmiar r = new Rozmiar();

另外,将映射从List<Rozmiar>更改为IList<Rozmiar> 看到这里: 6.1。 持久性集合集合映射支持的接口的完整列表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM