簡體   English   中英

如何在 EF 中使用強類型 ID?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM