C# 将枚举值作为LINQ中的存储过程(数据函数)参数传递给SQL

C# 将枚举值作为LINQ中的存储过程(数据函数)参数传递给SQL,c#,linq-to-sql,stored-procedures,parameters,enums,C#,Linq To Sql,Stored Procedures,Parameters,Enums,如中所述,LINQ to SQL允许表映射通过指定列的类型自动来回转换为枚举-这适用于字符串或整数。但是,当使用存储过程而不是自动生成的SQL来创建和更新实体时,我遇到了这个问题 在我的数据库中,我有一个表Users,其列角色类型为int。我还有一个存储过程CreateUser,它接受int类型的参数@Role。我希望用户角色在我的C代码中由enum角色表示。我可以将自动生成的用户类上Role属性的类型从int更改为Role,但是项目拒绝编译,因为Role属性的类型与存储过程中@Role参数对应

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

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


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

您可以重载CreateUser方法

public Enum Role
{
    Guy = 0,
    Girl = 1
}

public partial LINQtoSQLClass
{
    public ResultObject CreateUser(Role thisRole)
    {
        return CreateUser(Convert.ToInt32(thisRole);
    }
}

使用T4模板使用后端数据库中的实时数据生成可枚举类也是很常见的。这样,它就可以与Ints匹配,您不必手动更新它。

您可以重载CreateUser方法

public Enum Role
{
    Guy = 0,
    Girl = 1
}

public partial LINQtoSQLClass
{
    public ResultObject CreateUser(Role thisRole)
    {
        return CreateUser(Convert.ToInt32(thisRole);
    }
}
使用T4模板使用后端数据库中的实时数据生成可枚举类也是很常见的。通过这种方式,它与Ints匹配,您不必手动更新它

数据函数参数类型是由LINQ到SQL自动生成的,我找不到任何方法来更改它们

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

答案表明它可以与varchar和tinyint一起工作,因此它也可以与INT一起工作。最困难的部分可能是记住输入正确的名称空间。祝你好运

数据函数参数类型是由LINQ到SQL自动生成的,我找不到任何方法来更改它们

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

答案表明它可以与varchar和tinyint一起工作,因此它也可以与INT一起工作。最困难的部分可能是记住输入正确的名称空间。祝你好运