0

我需要从表的身份产生的任何东西中生成一个值。代码正在运行,但我想知道是否有更优雅的方式来做我正在做的事情。

问题是我的控制器不知道实体框架,因此我无法直接访问 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);
    }

有什么办法可以清理这个吗?

克里斯

4

0 回答 0