EF 4.0 проблема добавления объекта в контекст - PullRequest
0 голосов
/ 11 января 2010

Я сделал общую функцию сохранения для EF:

public void Save(T entity)
    {
        using (C context = new C())
        {
            string entitySetName = context.FindEntitySetByEntity<T>();

            T entityInDDBB = GetEntityByKey(entity, entitySetName, context);

            //if we didn't find the entity in database make an insert, if not an update.
            if (entityInDDBB == null)
            {

                **context.AddObject(entitySetName, entity);**
            }
            else
            {
                context.ApplyCurrentValues(entitySetName,  entity);
            }

            context.SaveChanges();
        }
    } 

Проблема заключается в том, что если мы передаем производный тип в AddObject (например, учитель), но отображение ожидает Person, он выдаст ошибку.

Как я могу изменить тип объекта (я полагаю, это невозможно без создания нового) или вы знаете какой-либо другой способ заставить его работать?

С уважением.

Ответы [ 2 ]

2 голосов
/ 11 января 2010

Ну, EF не позволяет вам рассматривать один класс CLR как другой.

т.е. Вы не можете относиться к Учителю как к личности.

Учитывая, что ограничение Учитель тоже должен быть сущностью, в противном случае это всегда будет неудачей.

Но из вашего описания звучит так, будто у вас нет Учительской сущности или картографической информации для Учителя?

К сожалению, пути к этому нет.

Alex

ПРИМЕЧАНИЕ: ваш код должен работать нормально, если у вас есть сущность учителя и сопоставления и , если FindEntitySetByEntity<Teacher>() возвращает то же самое, что и FindEntitySetByEntity<Person>().

1 голос
/ 11 января 2010

Убедитесь, что вы правильно определили отношение наследования в модели данных объекта. Вот хорошая статья об этом:

http://blogs.msdn.com/adonet/archive/2007/03/15/inheritance-in-the-entity-framework.aspx

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