我首先使用Entity Framework 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>
答案 0 :(得分:0)
我也有相同的要求。我的表只有一个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子句未引用此字段。我希望,如果您确实在代码中引用了该字段,则由于无效的转换(尤其是varchar-> int),EF生成的sql语句在转换期间可能会失败。我还没有尝试过。
我知道,这还有很多工作要做,但在我的背景下仍然有效。插入行并使用int值填充列。