繁体   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