簡體   English   中英

如何在Entity Framework Core中正確處理SQL_VARIANT?

[英]How do you properly handle SQL_VARIANT in Entity Framework Core?

看起來最近在.NET Core 2.1 (preview)向Entity Framework Core添加了支持,以允許映射SQL_VARIANT列( https://github.com/aspnet/EntityFrameworkCore/issues/7043 )。

看起來這樣做的方法是使用新的HasConversion()方法( https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions )。

因此,為了映射我的SQL_VARIANT列並將基礎數據類型視為任何長度的VARCHAR (我只關心此時讀取它),我可以執行以下操作(其中Value屬性的類型為object模型):

entity.Property(e => e.Value).HasConversion(v => v.ToString(),
                                                            v => v.ToString());

如果SQL_VARIANT的基礎數據類型是任何長度的VARCHAR ,則此方法有效。

但是,作為SQL_VARIANT ,該列可以包含其他類型的數據,例如DATETIME值。

為簡單起見,我在這里只指定了DateTimestring ,但理論上我可能希望支持映射SQL_VARIANT列中存儲的所有數據類型,如果可能的話。

我將如何確定在運行時我想要映射到的這兩種類型中的哪一種( stringDateTime )? 有沒有辦法做到這一點?

據我了解,目前的方法是:

// where e.Value is property of type "object"
entity.Property(e => e.Value).HasColumnType("sql_variant");

這就是全部,不需要任何自定義轉換器。 添加此功能的消息說明:

現在,類型映射器將屬性映射到sql_variant列,如果:

  • 該屬性是類型對象
  • 商店類型名稱指定為sql_variant

您當前的代碼滿足第一個條件(屬性是object類型),但不滿足第二個條件。 為什么它不能從屬性類型對象的屬性推斷存儲類型名稱 - 我不太確定,可能只是因為實體框架不是特定於sql-server並且支持許多其他數據庫,其中object屬性可以具有不同的語義或不支持所以,它需要明確說明你的意圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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