0

我想在人和车之间实现一对多的关系,并对人和车进行 CRUD 操作。简要的 CRUD 和关系:

更新

  • Aperson有很多cars
  • 通过人员对象对人员和汽车进行 CRUD 操作。
  • 删除一个人将删除他/她的所有汽车
  • 能够通过人对象或汽车对象对某人的汽车执行 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);
            });

        }
    }

我遇到的问题是,如果我更新一辆车并尝试将其保存在一个人对象上,它不会改变。

更新

我想知道它是否可能,以及我上面的映射在哪里是错误的。任何关于 xml 版本或 Loquacious 的想法也将不胜感激。

table 上应该有一个PersonId外键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 回答