[英]How to use strongly typed id in in EF?
我有原始的痴迷 class EmailAddress
已經覆蓋了ToString()
:
public class EmailAddress
{
private string _value;
public EmailAddress(string value)
{
_value = value;
}
public override string ToString()
{
return _value;
}
}
我的域 model Customer
看起來像:
public class Customer
{
public EmailAddress EmailAddress { get; set; }
public string FullName{ get; set; }
}
我在 FluentApi 中為EmailAddress
配置了轉換:
modelBuilder.Entity<Customer>().Property(x => x.EmailAddress)
.HasConversion(
x => x.ToString(),
x => new EmailAddress(x));
我也有通用的存儲庫模式,當我想過濾數據時:
public List<Customer> GetCustomers(GetCustomersQuery queryParameters)
{
IQueryable<Customer> queryCustomers = _customerContext.GetAll();
return queryCustomers.Where(x =>
x.EmailAddress.ToString()
.Contains(queryParameters.Email)).ToList();
}
我有一個錯誤:
無法翻譯 LINQ 表達式
DbSet<Customer>().Where(t => t.EmailAddress.ToString()
。其他信息:方法object.ToString
的翻譯失敗。
我試過 EF 6.4 你有什么解決方法嗎?
對於真正有動力,不怕復雜領域的人,我找到了解決方案
public class EmailAddress
{
private string _value;
public static explicit operator string(EmailAddress emailAddress) => emailAddress._value;
public EmailAddress(string value)
{
_value = value;
}
public override string ToString()
{
return _value;
}
}
查詢是
queryCustomers.Where(x =>
((string)x.EmailAddress)
.Contains(queryParameters.Email)).ToList();
此查詢在服務器端執行。
您可以嘗試如下:
return queryCustomers.Where(x =>
x.EmailAddress
.Contains(queryParameters.Email)).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.