Как сопоставить одну сущность нескольким таблицам БД с соглашениями об автоматическом использовании Fluent Nhibernate - PullRequest
0 голосов
/ 10 марта 2011

У меня есть одна сущность CustomProperty в доменной модели, которая используется от нескольких других сущностей.

Product
{
    int Id;
    Collection<CustomProperty> CustomProperties;
}

и

Order
{
    int Id;
    Collection<CustomProperty> CustomProperties;
}

Но в БД мне не нужна только одна таблица CustomProperty, которая содержит обнуляемый внешний ключ для Product таблицы и еще один обнуляемый внешний ключ для Order. Вместо этого мне нужны две отдельные таблицы ProductCustomProperty и OrderCustomProperty.

Мне нужно сделать это с помощью автоматического сопоставления и соглашений. У кого-нибудь есть идеи?

Кстати, у меня была идея, которая не работает для меня. Может быть, кто-нибудь знает, почему:

   public class CustomPropertyConvention : IHasManyConvention, IHasManyConventionAcceptance
   {
         public void Apply(IOneToManyCollectionInstance instance)
         {
                instance.Table("ProductCustomProperty");
         }

         public void Accept(IAcceptanceCriteria<IOneToManyCollectionInspector> criteria)
         {
                criteria.Expect(i => i.Relationship.Class.Name == "CustomProperty" && i.Relationship.EntityType == typeof(Product));
         }
   }

Этот пример, должно быть, работал отлично, но IOneToManyCollectionInstance.Table () ничего не устанавливает.

1 Ответ

0 голосов
/ 12 марта 2011

one-to-many отношения игнорируют таблицу, потому что столбец FK идет в сущности с несколькими сторонами.

Другими словами, вы не можете иметь одну сущность CustomProperty, сопоставленную с двумя разными таблицами (это не имеет смысла).

Вы можете использовать отображение many-to-many или сопоставить CustomProperty как составной тип вместо сущности.

...