Как я могу сопоставить один на одну связь в свободном отношении Nhibernate. Я перепробовал все остальное

StackOverflow https://stackoverflow.com/questions/2660984

Вопрос

У меня есть эта структура таблицы и хотела бы сопоставить его с помощью свободного гиберната (подкласс, если это возможно). Я не могу изменить структуру, потому что база данных имеет слишком много записей, и может привести к вариации основных приложений. Было бы проще, если удостоверение личности от партийного стола был внешним ключом лично и организационной таблицы, но в конкретном сценарии база данных имеет личность и организационный ключ в качестве внешнего ключа в партийной таблице. Любая помощь была бы здоровой.

Партийный стол

ID PersoniD Organization

Личный стол

Id fname lname.

Организация таблицы

Id orgname orgdescription.

Это было полезно?

Решение

Вы не можете сопоставить связывание таблицы с Automapping, если он содержит какие-либо поля, отличные от двух идентификаторов, которые составляют композитный идентификатор. В вашем случае ваша партия имеет идентификационное поле, которое нарушает правила автоматизации, поскольку он не хорошо спроектирован (т.е. составной идентификатор не должен иметь идентификатор автоматического увеличения, хотя мы делаем это для индексации, где я работаю).

Чтобы исправить это, вам просто нужно создать классное значение для Party, а также идентификатор карты и справочника и организации.

Затем, в своих лицах и организации организации, вместо того, чтобы создать хэшманитному картографичению на вечеринку, вы бы создадим Асмани к партийной организации.

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

Это приманила меня в течение трех дней, и я взял этот маршрут как «взлома», только чтобы позже прочитал это объяснение в Google Google Nhibernate пару недель назад.

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

Смотрите также Мой пост о такой же ситуации.

редактировать:

Вот как это будет смотреть на довольно высокий уровень. Помните, что вам придется инициализировать ваши коллекции в ваших конструкторах сущностей и создавать методы сеттера. Видеть Начиная

public class Party {
    public virtual int Id { get; set; }
    public virtual Person Person { get; set; }
    public virtual Organization Organization { get; set; }
}
public class PartyMap : ClassMap<Party> {
    public PartyMap() {
        Id(x => x.Id);
        References(x => x.Person);
        References(x => x.Organization);
    }
}
public class Person {
    public virtual int Id { get; set; }
    public virtual string FName { get; set; }
    public virtual string LName { get; set; }
    public virtual ICollection<Party> Parties { get; set; }
}
public class PersonMap : ClassMap<Person> {
    public PersonMap() {
        Id(x => x.Id);
        Map(x => x.FName);
        Map(x => x.LName);
        HasMany(x => x.Parties);
    }
}
public class Organization {
    public virtual int Id { get; set; }
    public virtual string OrgName { get; set; }
    public virtual string OrgDescription { get; set; }
    public virtual ICollection<Party> Parties { get; set; }
}
public class OrganizationMap : ClassMap<Organization> {
    public OrganizationMap() {
        Id(x => x.Id);
        Map(x => x.OrgName);
        Map(x => x.OrgDescription);
        HasMany(x => x.Parties);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top