无法在此上下文中创建System.Object常量

时间:2016-09-27 07:58:31

标签: c# asp.net-mvc-5

我尝试编写将遍历DbSet<staffCompetence>的代码,但它不起作用。

[HttpPost]
public ActionResult Index(StaffWrapper sw, HttpPostedFileBase file)
{
    var st = db.staff.Where(s => s.ID.Equals(sw.Id)).FirstOrDefault();

    if (st != null)
    {
        var cvs = TokenBoxExtension.GetSelectedValues<Guid>("StaffCompetenceTokenBox");
        UpdateCompetenceLinks(st.ID, cvs);
        //Rewrite values...

        db.Entry(st).State = EntityState.Modified;
        db.SaveChanges();
    }

    return View(sw);
}

private void UpdateCompetenceLinks(Guid staffId, Guid[] ids)
{
    var model = db.staffCompetence;

    for (int i = 0; i < ids.Length; ++i)
    {
        var id = ids[i];
        //On line below it crashes
        var scs = model.Where(s => s.competenceID.Equals(id)).ToList(); //ToList() for test

        if (!scs.Any())
        {
        }
    }
}

它在if条件下崩溃,异常为NotSupported,并且在此上下文中无法创建System.Object常量的消息。 这是什么意思?以及如何解决它?

P.S。我使用俄语调试器,所以我无法发布日志。 已添加

  

Исключениетипа“System.NotSupportedException”возниклов   EntityFramework.SqlServer.dll,нонебылообработановкоде   пользователя

     

Дополнительныесведения:Неудалосьсоздатьконстантустипом   “System.Object的”。 Вэтомконтекстеподдерживаютсятолькотипы-примитивы   итипыперечисления。

英文:

  

出现“System.NotSupportedException”类型的异常   EntityFramework.SqlServer.dll,但它不是由用户代码处理的。

     

细节:不断创造   “System.Object”类型失败。在此上下文中,type-premitives和iteration类型仅支持。

P.P.S我尽我所能翻译。

2 个答案:

答案 0 :(得分:1)

您可以将代码简化为以下内容:

using (dbPMEntities db = new dbPMEntities())
{
var model = db.staffCompetence;

foreach (Guid id in ids)
{
    **var scs = model.FirstOrDefault(s => s.competenceID.HasValue?s.competenceID.CompareTo(id):null);   //Do double-check to see whether the competenceID is of a real value……and check firstOrDefault()**

    if (scs==null)
    {
        var item = new staffCompetence();
        item.recID = Guid.NewGuid();
        item.competenceID = id;
        model.Add(item);
    }
 }
}

答案 1 :(得分:0)

您无法直接比较System.Guid。请使用Guid.CompareTo进行比较

dbPMEntities db = new dbPMEntities();
var model = db.staffCompetence;

foreach (Guid id in ids)
{
    var scs = model.Where(s => s.competenceID.CompareTo(id) > 0);

    if (!scs.Any())
    {
        var item = new staffCompetence();
        item.recID = Guid.NewGuid();
        item.competenceID = id;
        model.Add(item);
    }
}