Ошибка Entity Framework 3002/3003 — Проблема наследования / сопоставления ключей

#entity-framework

#entity-framework

Вопрос:

У меня есть модель данных следующим образом:

Модель данных

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

Внешние ключи являются:

 Customer.CustomerId => Product.CustomerId
Customer.CustomerId => PaymentMethod.CustomerId
Product.ProductId => ProductPaymentMethod.ProductId
PaymentMethod.PaymentMethodId => ProductPaymentMethod.PaymentMethodId
  

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

Я удалил связь между PaymentMethod и ProductPaymentMethod, добавил наследование от PaymentMethod к ProductPaymentMethod и удалил PaymentMethod ID из ProductPaymentMethod.

Теперь это моя модель:

Модель представления

Когда я сохраняю модель или создаю проект, я получаю 2 ошибки:

Ошибка 3002: Проблема с отображением фрагментов, начиная со строки 226: Потенциальное нарушение во время выполнения ключей table ProductPaymentMethod (ProductPaymentMethod.PRODUCTPAYMENTMETHOD id): Столбцы (ProductPaymentMethod.PRODUCTPAYMENTMETHOD id) сопоставляются со свойствами EntitySet PaymentMethods (PaymentMethods.PRODUCTPAYMENTMETHOD id) на концептуальной стороне, но они не формируют ключевые свойства EntitySet (PaymentMethods.Метод оплаты).

и

Ошибка 3003: Проблема с отображением фрагментов, начиная со строки 226: все ключевые свойства (PaymentMethods.PaymentMethod Id) из EntitySet Методы оплаты должны быть сопоставлены со всеми ключевыми свойствами (ProductPaymentMethod.PRODUCTPAYMENTMETHOD id) таблицы ProductPaymentMethod.

Что я делаю не так?

РЕДАКТИРОВАТЬ: После дальнейшего поиска в Google я нашел несколько решений, большинство из которых не совсем соответствуют этому сценарию. Большинство говорят о наследовании, требующем отношения 1-1, а не 1-много. Однако из-за отношения «Клиент-продукт 1-многие» модель требует соотношения «1-многие» между PaymentMethod и ProfilePaymentMethod. Невозможно ли сделать то, что я пытаюсь?

Комментарии:

1. Ссылки или краткое изложение ближайших решений, которые вы нашли, было бы неплохо.

Ответ №1:

Пока мой единственный ответ на это — иметь несколько созданных вручную классов POCO для представления и класс Mapper, чтобы превратить мой объект данных в объект представления