【问题标题】:Why doesn't this class hierarchy fluent mapping work?为什么这个类层次结构流利的映射不起作用?
【发布时间】:2011-12-23 05:02:41
【问题描述】:

下面显示的映射有什么问题?这是 GeneratedBy.Foreign() 的问题吗?我应该如何使用它,因为我在 UserTable(UID) 中的 PK 也是指 PersonTable PK(PID) 的 FK。我收到重复的类/实体映射控制台MappingTest.SystemUser 错误。你有什么建议(一定要看看数据库结构——没有办法改变它)。谢谢。

继承结构:

public class Person
{
    public virtual int ID { get; set; }
}

public class User:Person
{
    public override int ID
    {
        get
        {
            return base.ID;
        }
        set
        {
            base.ID = value;
        }
    }
    public virtual string Name { get; set; }
    public virtual int Salary { get; set; }
}

public class SystemUser:User
{
    public virtual int Password { get; set; }
}

数据库结构:

用于保存有关人员的一些信息(此处未显示某些字段):

PersonTable(PID)

用于保存用户及其所有子类,如系统用户:

UserTable(UID,Name,Salary,Type)

这是我的映射:

 public class PersonMap : ClassMap<Person>
{
    public PersonMap()
    {
        Table("PersonTable");
        Id(x => x.ID, "PID").GeneratedBy.Assigned();//or HiLo-not important
    }
}

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Table("UserTable");
        DiscriminateSubClassesOnColumn("Type").Default("U");
        Id(x => x.ID, "UID").GeneratedBy.Foreign("Person");//how should use this?
        Map(x => x.Salary);
        Join("PTable", j =>
        {
            j.KeyColumn("UID");
            j.Map(x => x.Name);
        });
    }
}

public class SystemUserMap : SubclassMap<SystemUser>
{
    public SystemUserMap()
    {
        DiscriminatorValue("SU");
        Map(x => x.Password);
    }
}

【问题讨论】:

    标签: nhibernate class mapping hierarchy fluent


    【解决方案1】:

    Foreign("") 旨在指向应从中检索 Id 的引用(具有另一个映射实体的属性)。您没有对名为 Person 的类 Person 的引用,因此您不能像这样使用它。

    你已经问过同样的问题并给出了答案。我知道我第一枪就做错了,但是如果你告诉我最新的编辑有什么问题或者你不喜欢在再次提出同样的问题之前的解决方案会很好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2018-05-28
      • 2020-09-01
      相关资源
      最近更新 更多