簡體   English   中英

如何在實體框架 6 中映射 SQL_VARIANT?

[英]How to map SQL_VARIANT in Entity Framework 6?

我首先使用實體​​框架 6 數據庫。 已經設計了數據庫,我需要使用它來創建 API。 在服務器表中 [sql_variant] 被用作列類型。 當我添加實體框架時,所有 [sql_variant] 列都被忽略並警告通知我沒有這種類型的映射!

我嘗試手動添加具有對象類型的 [sql_variant] 列並映射它。 但我得到它的價值總是為空!

//The name of my [sql_variant] column is Value.
[Column("Value", TypeName = "sql_variant")]
[Required]
public object Value { get; set; }


//In the context class I tried to add also the following.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
 modelBuilder.Entity<MeasurementData>();
 modelBuilder.Properties<MeasurementData>();
}

我仍然收到以下異常:

System.NotSupportedException
  HResult=0x80131515
  Message=The specified type member 'Value' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
  Source=<Cannot evaluate the exception source>
  StackTrace:
<Cannot evaluate the exception stack trace>

我只是有同樣的要求。 我的表只有一個 sql_variant 字段。 我所做的是使用我用來查詢此表中某些特定數據的條件返回 sql_variant 列中的 int 值的知識將 sql_variant 列映射到 int C# 字段。

假設該表名為 EntityPropertyValue,有一個名為 PropertyValue 的 sql_variant 列。

然后你可以有幾個 EF C# 類、EntityIntPropertyValue、EntityStringPropertyValue 等,其中 EntityIntPropertyValue 中的 PropertyValue 被聲明:

[Column("PropertyValue")]
public int PropertyValue {get; set;}

在 EntityStringPropertyValue 中,您有:

[Column("PropertyValue")]
public String PropertyValue {get; set;}

我在代碼中使用的 where 子句沒有引用這個字段。 我希望如果您確實在代碼中引用了該字段,EF 生成的 sql 語句可能會在轉換期間由於無效轉換而失敗,尤其是 varchar -> int。 我沒試過。

我知道,這需要更多的工作,但它適用於我的上下文。 插入行並使用 int 值填充列有效。

暫無
暫無

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

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