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