为什么这个类层次结构不能流畅映射工作?

时间:2011-12-23 05:02:42

标签: nhibernate class mapping hierarchy fluent

我的地图显示有什么问题?这是GeneratedBy.Foreign()的问题吗?我应该如何使用它,因为我在UserTable(UID)中的PK也是引用PersonTable PK(PID)的FK。我得到Duplicate类/实体映射consoleMappingTest.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);
    }
}

1 个答案:

答案 0 :(得分:0)

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

你已经回答了同样的问题。我知道我没有做到第一次拍摄,但如果你告诉我什么不适用于最新的编辑或者你不喜欢解决方案再次提出同样的问题会很好