テーブルの ID によって生成されるものから値を生成する必要があります。コードは機能していますが、私がやっていることをよりエレガントに行う方法があるかどうか疑問に思っています。
問題は、コントローラーが Entity Framework を認識していないため、コンテキストが保存されると ID 値を保持する EF エンティティに直接アクセスできないことです。
[HttpPost]
public ActionResult Index(NewPlannerEntryCreateViewModel vm)
{
if (ModelState.IsValid)
{
Mapper.CreateMap<PlannerEntryRecord, TradeSpendRecord>();
//Need to insert the records, then update them so that I
//can leverage existing stored procs
TradeSpendRecord r = Mapper.Map<PlannerEntryRecord, TradeSpendRecord>(vm);
r.VersionDate = now;
_tsRepo.Insert(r);
_uow.Save();
_tsRepo.PostInsert();
_uow.Save();
return RedirectToAction("Index", "Home", new { area = "US" });
}
そのため、EF エンティティをプライベート フィールドに割り当てるレポの挿入メソッドを呼び出し、コンテキストで Save() を呼び出してその EF エンティティを更新し、PostInsert() メソッドを呼び出して値を生成します。
public class TradeSpendRepository : EFRepository<tblTradeSpend>, ITradeSpendRepository
{
tblTradeSpend _record;
public void Insert(TradeSpendRecord record)
{
Mapper.CreateMap<TradeSpendRecord, tblTradeSpend>();
_record = Mapper.Map<TradeSpendRecord, tblTradeSpend>(record);
base.Insert(_record);
}
/// <summary>
/// We need to access the identity of this record, which
/// we can only do after SaveChanges() is executed in the controller
/// </summary>
public void PostInsert()
{
//Build the promo id off the ID
string promoId = (_record.ID + 1).ToString();
promoId = "000000" + promoId;
promoId = "P" + promoId.Substring(promoId.Length - 7, 7);
_record.PromoID = promoId;
Update(_record);
}
これをきれいにする方法はありますか?
クリス