我有一些使用数据库优先在实体框架中映射的存储过程。它创建强类型方法,您可以调用这些方法来运行存储过程。但是,我遇到了一个重大问题,因为我看不到任何方法可以调用它使用存储过程中定义的默认参数创建的这些方法。这表示:
a) 如果要更改默认参数值,我必须手动将默认参数添加到方法调用中,这很脆弱。
b) 手动编写方法重载。这基本上消除了首先从数据库生成模型的好处。
有谁知道这个问题是否有更好的解决方案?
谢谢。
我有一些使用数据库优先在实体框架中映射的存储过程。它创建强类型方法,您可以调用这些方法来运行存储过程。但是,我遇到了一个重大问题,因为我看不到任何方法可以调用它使用存储过程中定义的默认参数创建的这些方法。这表示:
a) 如果要更改默认参数值,我必须手动将默认参数添加到方法调用中,这很脆弱。
b) 手动编写方法重载。这基本上消除了首先从数据库生成模型的好处。
有谁知道这个问题是否有更好的解决方案?
谢谢。
截至 2013 年 1 月,没有受支持的方法可以让实体框架执行此操作。
我在这里打开了一个功能请求。
这是一个hacky解决方法。我不知道 EF 中是否有支持可选参数的功能,但您可以尝试模拟它 - 如果您愿意更改存储过程。
您可以将存储过程定义中的默认值更改为NULL
,然后在过程的主体中,将NULL
参数替换为所需的默认值。然后从使用 EF 的代码中,您可以传递null
以指示使用默认值。这样至少默认值只在 SP 本身中定义。
缺点当然包括现在NULL
变成“带外”值,这意味着如果您需要的话,您实际上不能将它传递给 SP(除了必须更改您的 SP 并确保所有未来的 SP 都使用这个奇怪的约定)