实体框架无法更新列;获取System.Data.EntityCommandCompilationException

时间:2014-07-07 08:40:12

标签: c# asp.net entity-framework entity-framework-4 entity-framework-5

在asp.net web api中,我使用Entity Framework与数据库进行通信。在这里,我试图更新表中的单个列。

public HttpResponseMessage ActivateAccount(string activation_code, string userMail)
{
   if (!string.IsNullOrWhiteSpace(activation_code) && !string.IsNullOrWhiteSpace(userMail))
   {
      Account activateAcc =  db.Accounts.Where(user => user.AccMail == userMail && user.ConfirmToken == activation_code).SingleOrDefault();

      if (activateAcc != null)
      {
         activateAcc.IsActive = true;
         db.SaveChanges();
         return Request.CreateResponse(HttpStatusCode.Accepted, "account activated");
      }
      else
      {
         return Request.CreateResponse(HttpStatusCode.NotAcceptable, "invalid account");
      }
   }
   else
   {
      return Request.CreateResponse(HttpStatusCode.NoContent, "missing user Mail or activation code");
   }
}

但是在那个声明中

Account activateAcc =  db.Accounts.Where(user => user.AccMail == userMail && user.ConfirmToken == activation_code).SingleOrDefault();

我正在使用此内部异常

获取类型System.Data.EntityCommandCompilationException的异常
  

错误3002:从第6行开始映射片段时出现问题:潜在的运行时违反表帐户的密钥(Account.AccID):列(Account.AccID)在概念方面映射到EntitySet帐户的属性(Accounts.AccID)但是它们不构成EntitySet的关键属性(Accounts.AccID,Accounts.AccMail,Accounts.AccName,Accounts.AccPassword,Accounts.IsActive,Accounts.IsAdmin)。\ r \ n \ r \ nAccPlusModel.msl(19,10):错误3002:从第19行开始映射片段时出现问题:表TansactionCategory键的潜在运行时违规(TansactionCategory.CatID):列(TansactionCategory.CatID)在概念方面映射到EntitySet TansactionCategories的属性(TansactionCategories.CatID)但它们没有形成EntitySet的关键属性(TansactionCategories.CatAccount,TansactionCategories.CatColor,TansactionCategories.CatID,TansactionCategories.CatName)

1 个答案:

答案 0 :(得分:0)

实体框架设计者已将表中的所有列标识为主键,因为当我设置框架时我没有PK,所以即使我在sql server和更新模式中设置PK也会保持相同所以我必须编辑模特我的自我