[英]Entity Framework sql_variant as primary key
對於一個項目,我使用 EF Core 5.0 搭建現有數據庫。
數據庫有一些表,其中sql_variant
列作為主鍵的一部分。
model 將該屬性創建為“對象”。
OnModelCreating
這個屬性:
entity.Property(e => e.OperationNo)
.HasColumnType("sql_variant")
.HasColumnName("Operation No_");
當我嘗試測試此自動腳手架時,我收到錯誤消息:
'ProdOrderRoutingLine.OperationNo' 屬性不能用作鍵,因為它具有不實現 'IComparable'、'IComparable' 或 'IStructuralComparable' 的類型 'object'。 使用 'OnModelCreating' 中的 'HasConversion' 將 'object' 包裝為可以比較的類型。
所以我嘗試了很多轉換sql_variant
到字符串或 object 或...與比較器。 為了簡單起見,我將嘗試將其轉換為具有默認比較器的字符串。
entity.Property(e => e.OperationNo)
.HasColumnType("sql_variant")
.HasColumnName("Operation No_")
.HasConversion<string>(str => str.ToString(), sql => sql.ToString());
在這里,我將屬性更改為string
,如果我將其保留為object
,則會收到相同的錯誤:
'ProdOrderRoutingLine.OperationNo' 屬性是當前數據庫提供程序不支持的'string' 類型。 更改屬性 CLR 類型,或使用“[NotMapped]”屬性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略該屬性
任何想法如何克服這個問題並將現有的sql_variant
用作部分主鍵?
OnModelCreate
主鍵:
entity.HasKey(e => new { e.Status, e.ProdOrderNo, e.RoutingReferenceNo, e.RoutingNo, e.OperationNo });
Model 的一部分:
public partial class ProdOrderRoutingLine
{
public byte[] Timestamp { get; set; }
public int Status { get; set; }
public string ProdOrderNo { get; set; }
public int RoutingReferenceNo { get; set; }
public string RoutingNo { get; set; }
public object OperationNo { get; set; }
public string NextOperationNo { get; set; }
public string PreviousOperationNo { get; set; }
public int Type { get; set; }
public string No { get; set; }
}
為了使轉換工作,我不得不注釋掉:
.HasColumnType("sql_variant")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.