gpt4 book ai didi

c# - 使用 EF 模型从字符串字段中存储和检索枚举的无缝方式

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:50 25 4
gpt4 key购买 nike

我有几个代表状态的枚举,并且都对应于 EF 模型上的字符串字段。选择所有枚举值,以便可以轻松地将它们表示为字符,因此它们设置如下:

public enum eStateCode
{
Running = 'R',
Terminated = 'T',
Cancelled = 'C',
}

这样数据库字段可以是一个char[1]类型,可以存储意义代码,而不是一个抽象的数字字段。这种方法使用 Linq to SQL 无缝工作,因为 char SQL 列映射到 char 字段,但不使用 EF。

使用 EF,当我尝试在这样的 lambda 表达式上使用它时

s => s.WFStateCode == ((char)ClassX.eStateCode.Running).ToString())

我明白了

LINQ to Entities does not recognize the method

错误,意味着 ((char)ClassX.eStateCode.Running).ToString() 被发送到 SQL。

我可以通过将 put ((char)ClassX.eStateCode.Running).ToString() 放在变量中来规避这个问题,但会使代码更加冗长。我读了几篇文章,但没有人说我如何强制 EF 解析客户端的表达式部分。

是否可以定义一个可以在 lambda 表达式中作为文字使用的方法,这样它就不会被发送到 SQL?

最佳答案

该错误意味着 EntityFramework 无法将您的代码转换为 SQL。您可以在发送到 EntityFramework 之前将其转换为字符串:

string stateCode = ((char)ClassX.eStateCode.Running).ToString();
.............
s => s.WFStateCode == stateCode

更新

您可以更改模型并将WFStateCode 的类型设置为eStateCode。这样,您将不需要任何转换。 EntityFramework 支持来自 EF5 的枚举。你的最终代码应该是这样的:

s => s.WFStateCode == ClassX.eStateCode.Running

关于c# - 使用 EF 模型从字符串字段中存储和检索枚举的无缝方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39228548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com