如 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 类型。这是它如何工作的示例:
答案表明它适用于 VARCHAR 和 TINYINT,因此它也应该适用于 INT。最难的部分可能是记住放入正确的命名空间。祝你好运!
关于c# - 在 LINQ to SQL 中将枚举值作为存储过程(数据函数)参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1750425/