Entity Framework Code First и совместное использование DataContext - PullRequest
0 голосов
/ 13 марта 2012

Я использовал текст данных с шаблоном единицы работы с сервисным слоем.Этот сервисный слой делает несколько GETS с большим количеством включений для проверки существующих данных.Затем я делаю вставку в конце с коммитом единицы работы.Я продолжал получать эту ошибку:

Операция завершилась неудачно: отношение не может быть изменено, поскольку одно или несколько свойств внешнего ключа не обнуляются.Когда в отношение вносится изменение, для соответствующего свойства внешнего ключа устанавливается нулевое значение.Если внешний ключ не поддерживает нулевые значения, необходимо определить новое отношение, свойству внешнего ключа должно быть назначено другое ненулевое значение или несвязанный объект должен быть удален.

ЕслиЯ сократил количество включений и сохранил вызов в отдельном текстовом тексте, вставка работает.Что-то происходит с моей вставкой и внешними ключами?

public void Save(int memberId, int? divisionId, DivisionGymCourtModel model)
{
   ValidationProvider.Validate(model);

    var item = new DivisionGymCourt();

    if (model.Id > 0)
    {
        Expression<Func<DivisionGymCourt, object>> memberDivisionInclude = q => q.Division.Event.Members;

        item = _divisionGymCourtRepository.Get(new[] { memberDivisionInclude }, q => q.Id == model.Id);

        if (item == null)
            throw new ValidationException(new NotFound("Division gym not found"));

        item.Division.ValidatePermission(memberId);

        if (model.GymCourt.Id != item.GymCourtId)
            IsGymCourtInUse(memberId, item.DivisionId, model.GymCourt.Id);
    }
    else
    {
        IsGymCourtInUse(memberId, divisionId.Value, model.GymCourt.Id);

       // _divisionsService.GetById(memberId, divisionId.Value); <!-- this was removed while the below division check was used.  This call had some INCLUDES.

        var division = _divisionsRepository.Get(null, q => q.Event.Members.Any(m => m.MemberId == memberId) && q.Id == divisionId.Value);

        if(division == null)
            throw new ValidationException(new NotFound("Division not found"));

        item.DivisionId = divisionId.Value;
    }

    item.GymCourtId = model.GymCourt.Id;
    item.Order = model.Order;

    if (model.Id > 0)
        _divisionGymCourtRepository.Update(item);
    else
    {
        _divisionGymCourtRepository.Add(item); 
    }

    UnitOfWork.Commit(); // <---- Erroring

    model.Id = item.Id;
}
...