Moja tabela ma dwie kolumny: CreatedBy
i CreateTime
. W moim widoku nie mam tych pól. Teraz, gdy aktualizuję rekord przy użyciu metody edycji (post) programu ASP.NET MVC4, kolumny te mają wartość null. Ale chcę zachować wartości. Wiem, że w mojej metodzie edycji (post) mogę pobrać rekord z bazy danych i ustawić je ręcznie. Ale zastanawiam się, czy mogę poprosić Entity Framework, aby nie zmieniała wartości tych pól.Metoda edycji MVC4 zmienia wartości na null, jeśli pola correspndong nie istnieją w postaci
Odpowiedz
Trzeba wyborów tutaj:
1) Jak wspomniano @KennyZ, dodać do @Html.HiddenFor()
gdzieś na widoku, w swojej formie:
@Html.HiddenFor(m => m.CreatedBy)
@Html.HiddenFor(m => m.createTime)
2) Można ręcznie aktualizować ten podmiot i pozostawić tylko te dwie właściwości:
var ent = dbctx.Entities.Find(model.ID);
ent.Prop1 = model.Prop1;
// ... also for other properties except those two property
dbctx.SaveChanges();
Nie, nie możesz, jeśli chcesz zachować stare wartości, musisz najpierw uzyskać rekord, a następnie ręcznie przypisać wartości, które chcesz zaktualizować. Jedynym sposobem jest przejść przez nieruchomości przez podmiot własności i tagu te, które chcesz zmodyfikować, tak:
db.MyEntity.Attach(myEntity);
db.Entry(myEntity).Property(e => e.MyProperty).IsModified = true;
db.SaveChanges();
czy inaczej skończyć się konieczności wykonywania pracy ręcznej samodzielnie.
Pewnie, że możesz. Zakładam, że są już w twoim modelu, po prostu dodaj je do formularza za pomocą Html.HiddenFor(m => m.createdBy)
. Teraz są w formie, ale nie są wyświetlane i wciąż mają wartości w metodach Post.