小编Kab*_*5CZ的帖子

在使用带ValueConverter的自定义类型时,实体框架Linq查询是客户端评估的

我正在使用Microsoft的Entity Framework Core并尝试使用ValueConverters来允许我的数据库模型实体中的自定义类型.关键是要拥有自己的类型,我可以自定义,并将其余代码与数据库中实际使用的类型屏蔽开来.

(遗憾的是,遗留代码直接访问模型实体而没有接口,所以除非我进行重大改造,否则这就是我剩下的.)

它主要工作,但我的问题是,实体框架不能我喜欢的类型转换为数据库类型的where子句 (可能还有其他,但这是我所遇到的),而是做一个客户端的评价,这显然是一个性能问题,因为所有候选人都被查询.

所以,我想知道是否有人遇到过此问题以及是否有解决方案,或者我是否必须尝试不同的方法.


如果你想要一些代码,那就是.我试图削减它,所以实现有点奇怪,但它仍然以同样的方式失败.

让我们调用我的自定义结构类型ItemId,让它保存一个字符串,并允许从long或string创建它:

public struct ItemId
{
    public string Data;

    public ItemId(long data)
    {
        Data = data.ToString();
    }

    public ItemId(string data)
    {
        Data = data;
    }

    public override bool Equals(object obj)
    {
        return obj is ItemId itemId && Data == itemId.Data;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Data);
    }

    public static bool operator ==(ItemId id1, ItemId id2)
    {
        return id1.Data == …
Run Code Online (Sandbox Code Playgroud)

c# valueconverter linq-to-sql entity-framework-core

6
推荐指数
0
解决办法
500
查看次数