c# - 在 LINQ to SQL 中将枚举值作为存储过程(数据函数)参数传递

标签 c# linq-to-sql stored-procedures parameters enums

this question 中所述,“LINQ to SQL 允许表映射通过指定列的类型自动来回转换为枚举 - 这适用于字符串或整数。”但是,在使用存储过程(而不是自动生成的 SQL)创建和更新实体时,我遇到了这个问题。

在我的数据库中,我有一个表 Users,其列 Role 类型为 int。我还有一个存储过程 CreateUser,它接受一个 int 类型的参数 @role。我希望用户角色在我的 C# 代码中由枚举 Role 表示。我可以将自动生成的 User 类的 Role 属性的类型从 int 更改为 Role,但是项目拒绝编译,因为 Role 属性的类型与数据函数角色参数的类型不匹配(对应于 @我的存储过程中的角色参数)。数据函数参数类型由 LINQ to SQL 自动生成,我找不到任何方法来更改它们。

我正在考虑将 Role 属性保留为 int,将其重命名为 RoleValue 之类的东西,将其设为私有(private),并添加另一个执行 int-enum 转换的 Role 类型的公共(public)属性。但似乎应该有更好的方法。

最佳答案

The data function parameter types are autogenerated by LINQ to SQL and I can't find any way to change them.

打开您的 DBML 文件,单击“角色”字段。属性窗口将有一个地方可以指定服务器类型以及 .NET 类型。这是它如何工作的示例:

Mapping Enum from String

答案表明它适用于 VARCHAR 和 TINYINT,因此它也应该适用于 INT。最难的部分可能是记住放入正确的命名空间。祝你好运!

关于c# - 在 LINQ to SQL 中将枚举值作为存储过程(数据函数)参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1750425/

相关文章:

c# - 如何防止 ODataConventionModelBuilder 自动公开所有派生类型的元数据?

sql - LINQ-to-SQL 是否支持可组合查询?

c# - 向 linqtosql dbml 中的表添加新列 - 无法删除所选类

mysql - 为什么我不能执行我的字符串?

stored-procedures - Oracle 存储过程的输出

c# - 异步调用 .NET 方法并在完成后绑定(bind)到网格

c# - 如何使用 Nhibernate 进行条件求和?

c# - Linq 选择与 ID 列表匹配的记录

sql-server - 我可以从 View 中动态调用存储过程吗?

C# 拉绳字母间距