Przejąłem projekt internetowy MVC, który wykorzystuje EF6, wzór repozytorium, jednostkę pracy. Po prostu zaczynam uczyć się EF6.

Chciałbym utworzyć nową organizację i zapisać go do bazy danych, a następnie uzyskać nowy identyfikator organizacji. Nowy identyfikator organizacji będzie używany do zmiany nazwy pliku obrazu, który będzie przechowywany w OrganiSation.logo. Następnie zaktualizuj pole logo organizacji w bazie danych z nową nazwą pliku.

Mam oszczędność organizacji, uzyskiwanie nowej identyfikatora organizacji, zmiany pliku, ale nie mogę zaktualizować pola logo?

Kod poniżej:

Kontroler organizacji - wyświetlany jest podstawowy kod Usunąłem wiele walidacji i zmiany nazwy pliku obrazu.

public ActionResult Create(OrganisationViewModel viewModelToCreate)
    {

        Organisation newOrganisation = new Organisation();
        newOrganisation.Name = viewModelToCreate.Name;
        newOrganisation.Logo = "To Change";

        _Uow.OrganisationRepository.InsertOrUpdate(newOrganisation);

        if (ModelState.IsValid)
        {
            _Uow.Save();
            int newOrganisationId = _Uow.OrganisationRepository.LastInsertedID();
            Organisation organisationToUpdate = _Uow.OrganisationRepository.Find(newOrganisationId);
string fileName = newOrganisationId.ToString() + Path.GetExtension(viewModelToCreate.FileNameToAdd.FileName);

                organisationToUpdate.Logo = fileName;
                _Uow.OrganisationRepository.InsertOrUpdate(organisationToUpdate);
                _Uow.Save();
            }

    }


public virtual T InsertOrUpdate(T e)
    {
        DbSet<T> dbSet = Context.Set<T>();

        DbEntityEntry<T> entry;
        if (e.ID != default(int))
        {
            entry = Context.Entry(e);

        }
        else
        {
            T instance = dbSet.Create();
            instance.ID = e.ID;
            entry = Context.Entry(instance);
            dbSet.Attach(instance);
            entry.CurrentValues.SetValues(e);
            e = instance;
        }

        entry.State = e.ID == default(int) ?
                                EntityState.Added :
                                EntityState.Modified;

        return e;
    }


     int IUnitOfWork.Save()
        {

                return _Context.SaveChanges();
     }

      public int LastInsertedID()
         {
             Context = new aContext();
             int newOrganisationId = Context.Organisations.OrderByDescending(x => x.ID).FirstOrDefault().ID;
             return newOrganisationId;
    }

Jak zaktualizować aktualizację organizacji.logo z nową nazwą pliku, nie zapisuje go w bazie danych?

-1
Ros 21 luty 2019, 13:58

2 odpowiedzi

Najlepsza odpowiedź

Ponieważ nie udostępniłeś swoich metod uow i repozytorium, nie możemy wiedzieć, co dokładnie dzieje się w swoim kodzie. Dostarczyłem jednak wymagany kod, który potrzebujesz, nie biorąc pod uwagę repozytorium i uow. Wystarczy sprawdzić, czy Twój kod wykonuje następujące czynności:

var db = new AppDbContext();

// inserting new organization
Organisation newOrganisation = new Organisation();
newOrganisation.Name = viewModelToCreate.Name;
newOrganisation.Logo = "To Change";
db.Organisation.Add(newOrganisation);
db.SaveChanges();

// updating the inserted organization
string fileName = ”New FileName”;
newOrganisation.Logo = fileName;
db.SaveChanges();
1
rad 21 luty 2019, 13:58

Potrzebujesz dwóch połączeń do metody [UOW.Save]. Zadzwoń do pierwszego jak ty. Kiedy to zrobiłeś, podmiot, który zapisany zostanie zaktualizowany z identyfikatorem, który został przypisany w bazie danych. Następnie dodaj kod, który bierze ten identyfikator i dołącza, że nazwa pliku jest potrzebna. Jeśli to nie działa, ma coś nie tak z twoim uowem lub repozytorium, który zapobiegnie temu przed pracującym. Na bok, uow i repozytorium są "wzorami", a nie implementacjami, więc nie można oczekiwać, że będziemy dowiedzieć się, jak wygląda ten kod i jak to działa, musisz być bardziej szczegółowo, co robisz, jeśli chcesz pytać odpowiedział

0
Robert Perry 21 luty 2019, 13:41