Следующий простой пример кода иллюстрирует рассматриваемый сценарий.У меня есть сущность Person, которая просто отображается в таблицу Person в БД.Я использую генератор кода Entity Object по умолчанию.
public partial class Person { ... }
У меня есть класс PersonDetail, унаследованный от Person, который содержит некоторые дополнительные свойства, необходимые для графического интерфейса.Ни одно из этих свойств не должно сохраняться в БД, поэтому я не хочу отображать этот класс в базу данных.
public class PersonDetail : Person
{
public int TheGuiNeedsThisInformation { get; set; }
}
И я отправляю экземпляры класса Detail с графическим интерфейсом WCF.Моя проблема заключается в том, что если GUI изменяет некоторые свойства экземпляра PersonDetail и отправляет его обратно на сервер для обновления, я не могу просто присоединить его к своему контексту, поскольку производный класс не сопоставлен ни с одной таблицей («Отображение иНе удалось найти информацию метаданных для EntityType PersonDetail ").Я попытался сопоставить его с той же таблицей, в которой сопоставлен класс Person, но EF выдает определенное исключение в отношении сопоставления таким образом.
Мне удалось обойти это, создав копию экземпляра PersonDetail, скопировав егозначения свойств в новый экземпляр Person, а затем сохраните его в БД.Однако я хотел бы избежать этой дополнительной работы.Что я делаю неправильно?Это не возможно?В Linq to SQL это работало как прелесть, в основном из коробки.
И если это невозможно, каков предлагаемый способ расширить мои классы сущностей с помощью дополнительной информации, которая не должнабыть упорным?(Очевидным способом было бы просто добавить дополнительные свойства к частичному классу Person. Однако я не хочу этого делать, потому что таким образом графический интерфейс никогда не может быть уверен, были ли дополнительные свойства заполнены на сервере или нет.)
ОБНОВЛЕНИЕ: Спасибо за предложения, однако мой главный вопрос все еще открыт: возможно ли иметь базовый и производный класс (где у производного класса нет никаких дополнительных свойств, которые должны быть сохранены вDB) сопоставлен с той же таблицей, чтобы я мог просто присоединить экземпляр производного типа к своему контексту и сохранить его, как если бы это был экземпляр базового типа?Я еще не мог этого сделать, и я удивлен, потому что с Linq to SQL это просто работало.