我尝试编写将遍历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我尽我所能翻译。
答案 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);
}
}