#entity-framework-4 #entity
#entity-framework-4 #сущность
Вопрос:
У меня возникают трудности с объединением двух объектов в один, где один является DefiningQuery данных только для чтения.
У меня есть объект Person и объект Company объект Person связан с объектом Company через компанию.Идентификатор компании для пользователя.CompanyID как один ко многим. Данные для компании поступают из другой базы данных, поэтому они представлены в виде DefiningQuery в моем SSDL с ключом. Я хочу сделать поля в Company частью объекта Person путем объединения объектов.
Ошибка 3024: Проблема с отображением фрагментов, начиная со строки 445: Необходимо указать отображение для всех ключевых свойств (Person.PersonID) объекта, задающего Person.
Я предполагаю, что проблема заключается в том, что у объекта Company нет PersonID, но я не хочу делать Company определяющим запросом как с PersonID, так и с CompanyID
Ответ №1:
У вас есть Person
и Company
в отношении «один ко многим», и из-за этого вы не можете сопоставить поля Person
и Company
с одной и той же сущностью. Этот тип сопоставления называется разделением сущностей и требует отношения «один к одному» между таблицами, которое может быть определено в EF только на основе общего первичного ключа (поскольку EF не поддерживает уникальные ограничения).
Комментарии:
1. Спасибо за ваш комментарий. Я обнаружил это недавно и сделал Company DefiningQuery плоским и добавил PersonID к Company entity, чтобы это выглядело как соотношение 1: 1. Теперь, когда я добавляю пользователя, я получаю следующую ошибку:
System.Data.UpdateException : Unable to update the EntitySet 'CompanyView' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.
2. Конечно, после использования DefiningQuery ваша сущность доступна только для чтения, если вы не создадите и не сопоставите хранимые процедуры для вставки, обновления и удаления.
3. Я хочу, чтобы это было доступно только для чтения, потому что я не хочу обновлять компанию. Сейчас я считаю, что не поддерживается объединение обновляемой таблицы с DefingingQuery, которая доступна только для чтения, в одну сущность.