簡體   English   中英

實體框架 sql_variant 作為主鍵

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

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