Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 4 将常量值传递给实体框架中的存储过程映射_Entity Framework 4 - Fatal编程技术网

Entity framework 4 将常量值传递给实体框架中的存储过程映射

Entity framework 4 将常量值传递给实体框架中的存储过程映射,entity-framework-4,Entity Framework 4,我正在为我们的数据库表创建一个实体框架模型,在大多数情况下,事情进展得很顺利。但是,我在映射存储过程时遇到了一些问题。看,我们公司使用的自制ORM倾向于使用一个存储过程来插入和更新,并通过传递一个名为@IsInsert的位值参数来区分操作(我知道,不要让我开始)。实体框架似乎希望插入和更新时使用单独的存储过程,所以我想我所要做的就是在将此参数用作插入时告诉EF“passtrue,如果它是更新,则告诉EF“passfalse”。但是,至少根据DesignerUI,它似乎没有为实体对象上的字段之外的

我正在为我们的数据库表创建一个实体框架模型,在大多数情况下,事情进展得很顺利。但是,我在映射存储过程时遇到了一些问题。看,我们公司使用的自制ORM倾向于使用一个存储过程来插入和更新,并通过传递一个名为
@IsInsert
的位值参数来区分操作(我知道,不要让我开始)。实体框架似乎希望插入和更新时使用单独的存储过程,所以我想我所要做的就是在将此参数用作插入时告诉EF“pass
true
,如果它是更新,则告诉EF“pass
false
”。但是,至少根据DesignerUI,它似乎没有为实体对象上的字段之外的任何映射提供选项。有没有办法将常量值(布尔值
true
false
)传递给EF4中的存储过程映射?

您最好的选择可能是使用context.executestorequery(查询)并保持它以前的状态。

糟糕的人-创建两个包装存储过程如何:存储过程,存储过程Upd-这些是EF调用的过程。这些存储过程只需将param传递给另一个进程,就可以传递给我遇到的不可靠的进程,但我真的希望尽可能少地更改DB。令人震惊的是,我们的DB部署过程并不是世界上最平滑的。所以你想重复使用相同的存储过程?为什么不将insert和update操作映射到同一存储过程,然后将IsInsert属性添加到模型中呢。这样做并不理想,但应该允许您重新使用存储过程(如果这是您最初的目标的话)。可以说我是一个纯粹主义者,但我真的不喜欢用逻辑来污染我的域对象,而这种逻辑只是为了促进持久性。另外,这需要为每个对象手动设置IsInsert属性,这在我看来只是自找麻烦。如果我错了,请纠正我,但这不意味着每次都必须手动调用该方法吗?也就是说,EF存储过程映射的好处是,我可以让它准备必要的存储过程,并在必要时为我自己调用,这样我就可以说entityCollection.Save()(或其他什么),而不必担心设置查询,对吗?您的查询有一个特殊情况。您可以使用context.executestorequery(查询),您将得到的是实体框架跟踪的强类型实体。因此,当您修改收到的其中一个实体时,您所要做的就是context.save(),它将保存所有被修改的实体。但是
query
参数必须手动准备,对吗?例如:context.ExecuteStoreQuery(“EXEC MyUpdateInsertSproc@IsInsert=1…”)(或类似的内容)。另外,context.Save()不会自动调用映射的存储过程吗?