私は本当に "問題"はありませんでしたが、私はこのコードを実際にうまく開発しない方法を見つけました。エンティティフレームワークでエンティティを更新するより良い方法はありますか?
私は私の国コントローラ(編集方法)(WebUIの層)があります。あなたが見ることができるように、私が使用して、実際に
public void UpdateCountry(Country country)
{
EnsureValidForUpdate(country);
// UPDATE
var countryToUpdate = _groupsRepository.getCountryById(country.CountryId);
countryToUpdate.CountryId = country.CountryId;
countryToUpdate.Name = country.Name;
countryToUpdate.ISOCode = country.ISOCode;
_groupsRepository.SaveChanges();
}
:
[HttpGet]
public ActionResult Edit(int id)
{
var country = _groupsRepository.getCountryById(id);
Mapper.CreateMap<Country, CountriesEditViewModel>();
CountriesEditViewModel viewModel = Mapper.Map<Country, CountriesEditViewModel>(country);
return View(viewModel);
}
//
// POST: /CountriesAdmin/Edit/5
[HttpPost]
public ActionResult Edit(int id, CountriesEditViewModel viewModel)
{
try
{
if (ModelState.IsValid)
{
Mapper.CreateMap<CountriesEditViewModel, Country>();
Country country = Mapper.Map<CountriesEditViewModel, Country>(viewModel);
country.Name = IntranetTools.UppercaseFirst(country.Name.Trim());
country.ISOCode = country.ISOCode.ToLower();
_countryValidationService.UpdateCountry(country);
}
}
catch (RulesException ex)
{
ex.CopyTo(ModelState);
}
if (ModelState.IsValid)
return RedirectToAction("Index");
else return View(viewModel);
}
そして、私の検証サービス(ドメイン層)私の国のエンティティ(Entity Framework)と私のビューモデルをマッピングするオートマッパ 私は検証を行い、オブジェクトに(エラーがなければ)データベースを更新する検証サービスを使用します。事実は、私はこのオブジェクトを保存するためにIdによって私のオブジェクトをDBから取得しなければならないと感じているということです。私は
var countryToUpdate = _groupsRepository.getCountryById(country.CountryId);
countryToUpdate.CountryId = country.CountryId;
countryToUpdate.Name = country.Name;
countryToUpdate.ISOCode = country.ISOCode;
_groupsRepository.SaveChanges();
を保存するためのよりよい解決策がある(私は毎回私のオブジェクトのすべてのフィールドをマッピングし、DBから国名を取得する必要はありませんので)私のオブジェクトを更新するためのより良い解決策が多分あると思いますエンティティFramworkの私のオブジェクトまたは私は選択がありません?
ありがとうございます!
ありがとうございます。私はこの方法を知らなかった。実際には、私はそれがより多くのリソースを使用していると思ったので、まずDBからロードしたくありませんでした。 – Areasta