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