【问题标题】:Check if Record Exists in Entity Framework [duplicate]检查实体框架中是否存在记录[重复]
【发布时间】:2014-07-02 11:21:39
【问题描述】:

谁能告诉我如何检查记录是否存在,如果存在则什么都不做,如果不存在则将记录添加到数据库中?

请看我下面的代码:

if (isIpnValidated == true)
{
    using (WebApplication1Entities db = new WebApplication1Entities())
    {
        Orders order = new Orders();
        order.UserId = userId;
        order.Date = System.DateTime.Now;
        order.Transaction = txnId;
        order.Amount = Convert.ToDecimal(mcGross);
        order.Email = payerEmail;
        order.Country = residenceCountry;

        db.Orderss.Add(order);
        db.SaveChanges();
    }
}

我只是想确保数据库中没有可能的重复。

【问题讨论】:

  • 什么构成重复?
  • 抱歉,我想确保 txnId 不存在。
  • 您的问题与 ASP.NET MVC 完全无关。不过,您的代码看起来像是在使用实体框架。你是说 EF 5 吗?
  • 我不能使用 Any 和这个功能,我可以使用 Find、Add、AddRange 等......但不幸的是不能使用 Any。
  • @iggyweb 那么您缺少对System.Linq 的引用。将其添加到文件顶部,或获取 Resharper ;)

标签: c# entity-framework


【解决方案1】:

使用Any:

if (isIpnValidated)
{
    using (WebApplication1Entities db = new WebApplication1Entities())
    {
        if (db.Orderss.Any(o => o.Transaction == txnId)) return;

        Orders order = new Orders();
        order.UserId = userId;
        order.Date = System.DateTime.Now;
        order.Transaction = txnId;
        order.Amount = Convert.ToDecimal(mcGross);
        order.Email = payerEmail;
        order.Country = residenceCountry;

        db.Orderss.Add(order);
        db.SaveChanges();
    }
}

【讨论】:

  • 这假设他不想更新现有记录...
  • 是的,看看他的问题:“如果它确实存在,那么什么都不做”
  • 我绝对不想更新,只有在txnId不存在的情况下才添加。
  • 我能再问一件事吗,我如何检查用户和今天的日期是否确实存在订单,我试过if (db.Orderss.Any(o => o.UserId == userId && o.Date == System.DateTime.Now)) return;,但它似乎不起作用。
  • if (db.Orderss.Any(o => o.UserId == userId && o.Date.Date == System.DateTime.Today)) return; 呢?
【解决方案2】:
using (WebApplication1Entities db = new WebApplication1Entities())
{
   var order = db.Orders.GetAll().Where(x=> x.Transaction == txnId).FirstOrDefault();
   if(order != null) // update
   {
      //.....
      db.SaveChanges();
    }
   else
   {
      // new
   }
}

【讨论】:

  • 不,因为他要处理订单,所以不需要运行两次语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多