Почему не работает свободное отображение этой иерархии классов? - PullRequest
0 голосов
/ 23 декабря 2011

Что не так с моим отображением, показанным ниже? Это проблема с GeneratedBy.Foreign ()? Как его использовать, потому что мой PK в UserTable (UID) также является FK, который относится к PersonTable PK (PID). Я получаю Дублирующую ошибку 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 голосов
/ 01 января 2012

Foreign("") предназначен для указания на ссылку (свойство с другим сопоставленным объектом), из которого должен быть получен идентификатор.У вас нет ссылки на класс Person с именем Person, поэтому вы не можете использовать его следующим образом.

вы уже задавали тот же вопрос с ответом.Я знаю, что не правильно сделал первый выстрел, но было бы неплохо, если бы вы сказали мне, что не работает с последним редактированием, или вам не понравится решение, если вы снова зададите тот же вопрос

...