参数类型'Edm.String'和'Edm.Int32'与此操作不兼容

时间:2016-08-08 15:16:47

标签: c# sql-server asp.net-mvc entity-framework linq-to-entities

我收到的错误就像上面的标签一样,会出现在

的位置
  

return View(st.employees.Find(id));

只在上面的地方,任何人都可以帮助我!我的代码是

     namespace StartApp.Controllers
  {
public class EmployController : Controller
{
    StartEntities st = new StartEntities();
    //List
    public ActionResult List()
    {
        return View(st.employees.ToList());
    }
    //Details
    public ActionResult Details(int id = 0)
    {
        return View(st.employees.Find(id));
    }
    //Create
    public ActionResult Create()
    {
       return View();
    }


    [HttpPost,ValidateAntiForgeryToken]
    public ActionResult Create(employee e)
    {
        using(st)
        {
            st.employees.Add(e);
            try
            {
                st.SaveChanges();
            }
            catch
           {
               System.Diagnostics.Debug.WriteLine("Here is an error");
            }
        }
        return RedirectToAction("List");
    }
   //edit
    public  ActionResult Edit(int id = 0)
    {

           return View(st.employees.Find(id));

    }

    [HttpPost,ValidateAntiForgeryToken]
    public ActionResult Edit(employee e)
    {
        st.Entry(e).State = EntityState.Modified;
        st.SaveChanges();
        return RedirectToAction("List");
    }
    //Delete
    public ActionResult Delete(int id = 0)
    {
        return View(st.employees.Find(id));
    }
    [HttpPost,ActionName("Delete")]
    public ActionResult Delete_conf(int id)
    {
        employee emp = st.employees.Find(id);
           st.employees.Remove(emp);
           st.SaveChanges();
           return RedirectToAction("List");
    }

}

}

任何人都可以帮我纠正这个错误!

3 个答案:

答案 0 :(得分:3)

当您的实体主键是A类并且您将一个非A类型的变量传递给Find方法时,通常会发生此异常。

Find方法的official documentation,它可能会抛出以下异常

  

<强>出现InvalidOperationException

     

如果键值的类型与类型不匹配,则抛出   要找到的实体类型的键值。

确保在调用Find方法时使用相同的类型变量。

在您的代码中,您将整数变量传递给Find方法。从错误中我相信你的实体类主键不是int类型。可能是Guid类型,在这种情况下,请确保将有效的Guid值传递给Find方法。

您可以打开edmx文件并查看密钥类型,并确保将相同类型传递给Find方法。

右键单击edmx文件中的实体,然后选择属性。

enter image description here

答案 1 :(得分:1)

好像你正在遵循MVC模式。

我也遇到了这个错误,这是因为我将id参数作为整数传递而不是我在模型中声明的“string”。

样品:

#parent{   
    background:yellow;  
    display:inline-flex;
}
.left{
    display:flex;
    flex: 1 1 auto;
}
.right{   
    display:flex;  
    background-color:red;
}

答案 2 :(得分:0)

Find()只接受数据类型与您将要使用Find()的表的主键类似的参数。