ASP.NET MVC Code Первое создание дублирующей записи - PullRequest
1 голос
/ 25 января 2012

Сначала я создаю приложение, используя MVC и код Entity Framework.

Я использую инициализатор для заполнения базы данных, когда она воссоздается при любых изменениях модели.

У меня проблемы с EF Code. Сначала я создаю дубликаты записей. Самый простой способ объяснить это - показать мой код.

    //
    // POST: /Incident/CreateIncident
    [HttpPost]
    public ActionResult CreateIncident(IncidentViewModel model)
    {
        Incident incidentToAdd = new Incident();

        // Record incident details
        incidentToAdd.Caller = repository.GetDomainUser(model.selectedCaller);
        incidentToAdd.CallerType = model.Incident.CallerType;
        incidentToAdd.Service = repository.GetService(model.selectedService);
        incidentToAdd.Category = repository.GetCategory(model.selectedCategory);
        incidentToAdd.AllocatedTo = repository.GetHelpDeskMember(model.selectedAllocatedTo);

        [Rest of code omitted to save space]

        // TODO: Send Email to Caller and AllocatedTo

        // Store incident in database
        db.Incidents.Add(incidentToAdd);
        db.SaveChanges();

        return RedirectToAction("Index");
    }

Я получаю существующий Service, Category и AllocatedTo из репозитория, но когда речь идет о сохранении записи, вместо ссылки на существующий Service, Category и т. Д. Он создает новую запись, которая является дубликатом существующего .

Я не очень хорошо объяснил это. Но если вы можете предложить какую-либо помощь, она будет очень признательна.

Спасибо.

1 Ответ

1 голос
/ 26 января 2012

Я решил проблему. Я не уверен, что это правильный способ, но я получаю желаемый результат.

Теперь вместо простого добавления сущности, возвращенной из базы данных, в инцидент, который я использую, теперь я использую EntityState, чтобы указать сущность как неизменную.

Service service = repository.GetService(model.selectedService);
incidentToAdd.Service = service;
db.Entry(service).State = EntityState.Unchanged;

Category category = repository.GetCategory(model.selectedCategory);
incidentToAdd.Category = category;
db.Entry(category).State = EntityState.Unchanged;

HelpDeskMember allocatedTo = repository.GetHelpDeskMember(model.selectedAllocatedTo);
incidentToAdd.AllocatedTo = allocatedTo;
db.Entry(allocatedTo).State = EntityState.Unchanged;

Я нашел информацию по этой ссылке: Использование DbContext в EF 4.1, часть 4: Добавить / присоединить и состояния сущности

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