EF 4 вставить сущность во взаимосвязь с существующей сущностью - PullRequest
0 голосов
/ 07 декабря 2010
using (EntitiesContainer db = new EntitiesContainer())
{
    Language language = db.Languages.SingleOrDefault(x => x.Culture == _session.Language);
    Language language2 = new Language { Id = action.Language.Id };
    Operation operation = new Operation { Id = action.Operation.Id };
    //Operation operation = db.Operations.SingleOrDefault(x => x.Id == action.Operation.Id);

    if (!language.Id.Equals(language2.Id))
    {
        db.Languages.Attach(language2);
        action.Language = language2;
    }
    else
    {
        action.Language = language;
    }

    db.Operations.Attach(operation);

    //db.ObjectStateManager.ChangeObjectState(operation, System.Data.EntityState.Unchanged);

    action.Operation = operation;
    //operation.Internals.Add(action);

    action.CurrentDetail.Language = language;
    action.CurrentDetail.Id = Guid.NewGuid();

    action.Id = Guid.NewGuid();

    db.SaveChanges();
}

alt text alt text

Здравствуйте, я попробую весь этот сценарий в комментариях, чтобы связать мою существующую операцию с внутренним действием, которое унаследовано от действия ... но в любом из этих сценариев он выдает мне ошибку, как будто он хочет вставить новую операцию в БД (dbo.Operations может принимать значение «Действие» NULL), но сущность уже существует .. Может кто-нибудь, пожалуйста, дайте мне золотое правило .. вставлять сущность с отношением .. существующую или нет в EF. Это сводит меня с ума!

Cordialy, Жюльен.

1 Ответ

0 голосов
/ 08 декабря 2010

Если я вас правильно понимаю (вы пытаетесь обновить отношения), вы можете использовать заглушку :

Language lang = new Language { Id = action.language_id }; // create stub with ID
db.Languages.Attach(lang); // attach stub to graph
action.language = lang; // update relationship
db.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...