0

人と車の間に1対多の関係を実装し、人と車の両方でCRUD操作を行いたいです。簡単な CRUD と関係:

アップデート

  • Apersonにはたくさんあるcars
  • person オブジェクトを介した人と車の両方に対する CRUD 操作。
  • 人を削除すると、すべての車が削除されます
  • person オブジェクトまたは car オブジェクトを介して、誰かの車に対して CRUD 操作を実行する機能。

ORM、特にNHibernate経由で可能ですか?

以下のようなクラス:

public class PersonSet
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual ISet<CarSet> Cars { get; set; }
}

public class CarSet
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual PersonSet Person { get; set; }
}

マッピングを以下に示します。

  public class PersonSetMap : ClassMapping<PersonSet>
    {
        public PersonSetMap()
        {
            Id(x => x.Id, m=>m.Generator(Generators.Identity));
            Property(x=>x.Name);
            Set(x => x.Cars, c =>
                {
                    //c.Key(k =>
                    //    {
                    //        k.Column("PersonId");
                    //    });
                     c.Cascade(Cascade.All);
                    c.Lazy(CollectionLazy.NoLazy);
                   // c.Inverse(true);
                }
                , r =>
                    {
                        r.OneToMany();
                    }
                );
        }
    }

    public class CarSetMap : ClassMapping<CarSet>
    {
        public CarSetMap()
        {
            Id(x => x.Id, m => m.Generator(Generators.Identity));
            Property(x => x.Name);
            ManyToOne(x => x.Person, m =>
            {
                m.Column("PersonId");
                m.Cascade(Cascade.None);
                m.NotNullable(true);
            });

        }
    }

私が抱えている問題は、1 台の車を更新して人物オブジェクトに保存しようとしても、変更されないことです。

アップデート

それが可能かどうか、および上記のマッピングがどこで間違っているかを知りたいです。xml バージョンまたは Loquacious に関するアイデアもいただければ幸いです。

PersonIdtableに外部キーが必要Carです。

4

1 に答える 1

0

これで問題が解決するかどうかはわかりませんが、ManyToOne マッピングでは Unique メソッドと NotNullable メソッドを列レベルで適用する必要があります。

ManyToOne(x => x.Person, m =>
{
    m.Column(c =>
    {
        c.Name("PersonId");
        c.NotNullable(true);
    });
    m.Cascade(Cascade.None);
});
于 2013-06-24T12:38:19.147 に答える