Почему для внешнего ключа создаются два столбца? - PullRequest
1 голос
/ 23 февраля 2012

Допустим, у меня есть класс продукта со свойством Category.

public class Product : Entity<int> // Base class defines the Id
{
  public virtual ProductCategory Category { get; set; }
}

Файл сопоставления прост

public class ProductMap : ClassMap<Product>
{
  public ProductMap()
  {
    Id(x => x.Id);
    References(x => x.Category).Nullable();
  }
}

Использование SchemaExport.Create Это создало два столбца в моей базе данных, ProductCategoryId и CategoryId. Учитывая мои условности, должен существовать только CategoryId. Оба могут быть обнуляемыми, но используется только CategoryId. Неважно, что ProductCategoryId всегда равно нулю, и это столбец с ограничением внешнего ключа.

Почему это? На самом деле я не могу найти никаких проблем с кодом, насколько я могу сказать, что все работает нормально, используя столбец CategoryId. Я могу запросить / сохранить / обновить с или без категории. Я бы даже не знал, что другой столбец существует, если бы я не пошел искать в базе данных, но мне не нравится иметь столбец, когда я не знаю, для чего он. Есть ли причина, по которой это происходит, или что-то не так с тем, как я отобразил недействительную ссылку?

1 Ответ

0 голосов
/ 27 февраля 2012

Ну, проблема не в том, что я имею в виду класс Product или ProductMap.Проблема связана с картой ProductCategory.

Именно так создается столбец ProductCategoryId в базе данных.

public class ProductCategoryMap : ClassMap<ProductCategory>
{
    public ProductCategoryMap()
    {
        Id(x => x.Id);
        // Other mappings
        HasMany(x => x.Products).Inverse().Cascade.AllDeleteOrphan();
    }
}

Это сопоставление не может сказать, что оно былопредполагается использовать существующий столбец CategoryId.Если указать его в файле сопоставления или даже переименовать мое свойство Category в классе Product в ProductCategory, это заставит его прекратить создание другого столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...