我正试图在我的应用程序中实现实体框架6,但我有一个问题执行记录更新。
如果我在数据库中有2条记录,我们说:
<表类>
Id
名称
Lastname
tbody><<tr>1 杰森 而Momoa 2Aqua 男人 表类>
因此,在miniprofiler(感谢Armando Bracho)和mysql日志(感谢Steve Py)中看到总是有一个sql查询和Gert Arnold指出过程可能失败后,我专注于过程。
看起来,该过程将PersonId
列名与CREATE PROCEDURE
-header中定义的PersonId
变量混合在一起。
所以我添加了一些代码来手动定义更新过程参数。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Person>().MapToStoredProcedures(p => p.Update(pp => pp.HasName("Person_Update").Parameter(pm => pm.Name, "db_Name").Parameter(pm => pm.Lastname, "db_Lastname").Parameter(pm => pm.PersonId, "db_PersonId")));
}
将存储过程更改为:
CREATE DEFINER=`root`@`localhost` PROCEDURE `Person_Update`(IN db_PersonId int,IN db_Name varchar(255) ,IN db_Lastname longtext)
BEGIN
UPDATE `People` SET `Name`=db_Name, `Lastname`=db_Lastname WHERE `PersonId` = db_PersonId;
END
,这终于成功了!
编辑
将MapToStoredProcedures
改为
modelBuilder.Entity<Person>().MapToStoredProcedures(p => p.Update(pp => pp.HasName("Person_Update").Parameter(pm => pm.PersonId, "db_PersonId")));
这样就不必为所有属性定义它了。