我需要从表的身份产生的任何东西中生成一个值。代码正在运行,但我想知道是否有更优雅的方式来做我正在做的事情。
问题是我的控制器不知道实体框架,因此我无法直接访问 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" });
}
所以我调用了我的 repo 的 insert 方法,它将 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);
}
有什么办法可以清理这个吗?
克里斯