在过去的几天里,我一直在互联网上寻找与我的问题类似的主题。我终于求助于自己提出了这个问题。
使用代码优先方法和 EF 4.3.1,我创建了一个上下文类、实体类和用于存储存储过程输出的类。上下文类具有使用 执行某些存储过程的方法SqlQuery<T>
。
例子:
public IEnumerable<Results> GetData(int id)
{
var parameters = new SqlParameter[] { new SqlParameter("@id", id) };
var result = this.Database.SqlQuery<Result>("Exec dbo.sproc_GetData @id", parameters);
var data= result.ToList<Result>();
return data;
}
当我跟踪我的调试时,我的数据回来了,并且数据被映射到具有匹配名称的属性。但是,在输出中有一个名称中带有 a 的列"/"
(例如:Info/Data
)。显然我不能命名这样的属性,所以我想我可以使用列属性 ( [Column("Info/Data")]
) 映射输出:
[Column("Info/Data")]
public string InfoData
{
get { return infoData; }
set { infoData= value; }
}
我什至尝试使用逐字运算符 ( ),用( )[Column(@"Info/Data")]
包裹文本,并且都尝试了 ( )。单步执行代码时,我看到分配了具有匹配列名的属性,但具有列属性的属性在分配期间被忽略并跳过。[]
[Column("[Info/Data]")]
[Column(@"[Info/Data]")]
我还为实体的每一列尝试了 fluent-api。
modelBuilder.ComplexType<Result>().Property(d => d.InfoData).HasColumnName("Info/Data");
但这会引发以下异常:
数据读取器与指定的“NameSpace.Result”不兼容。类型的成员“InfoData”在数据读取器中没有同名的对应列。
在我的项目NameSpace.Result
中是一个类(为安全起见更改了名称),并且InfoDatais
是我尝试使用 fluent-api 映射的属性(相应的 sql 列中包含 /;例如:Info/Data)。
有没有人遇到过这个问题?
如果我的问题不清楚或之前有人问过,请告诉我。