如何为从存储过程导入的函数设置params的修订顺序?

时间:2011-06-06 19:14:48

标签: entity-framework-4

使用EF 4.x.从数据库导入SP。

假设MySp有3个参数

Create Procedure MySp
@P1 varchar,
@P2 varchar, 
@p3 int
As
Begin
......
End

然后我从数据库导入此SP作为edmx中的函数。 edmx中的xml将是:

<Function Name="MySp" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
  <Parameter Name="P1" Type="varchar" Mode="In" />
  <Parameter Name="P2" Type="int" Mode="In" />
  <Parameter Name="P3" Type="varchar" Mode="In" />
</Function>

很好。然后我继续在数据库中添加新内容,但MySp没有任何变化。所以从数据库更新是dev的日常工作。

但有一天,当更新数据库进行其他更改时,xml中MySp的更改:参数顺序已更改!

<Function Name="MySp" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
  <Parameter Name="P3" Type="varchar" Mode="In" />
  <Parameter Name="P1" Type="int" Mode="In" />
  <Parameter Name="P2" Type="varchar" Mode="In" />
</Function>

由于许多代码已经根据参数顺序完成,如MyFunc(字符串p1,字符串p2,int p3),现在生成的函数变为MyFunc(int p3,string p1,string p2)。这对开发者来说是灾难!

如何解决此问题?

2 个答案:

答案 0 :(得分:0)

我建议您使用Entity Developer for SQL Server。如果参数的集合未更改,我们的数据库更新模型不会刷新过程。

答案 1 :(得分:0)

这是EF的一个错误,它会更改数据库中每个更新模型的参数顺序。我们所做的是将存储过程移动到不同的模型,并且它不像我们的表模型那样更新。