我正在使用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)