小编Sam*_*vic的帖子

实体框架存储过程结果映射

在过去的几天里,我通过互联网查找了类似的问题.我终于自己提出这个问题.

使用代码优先方法和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;
}
Run Code Online (Sandbox Code Playgroud)

当我跟踪调试时,我的数据又回来了,数据被映射到具有匹配名称的属性.但是,在输出中有一个"/"名称中带有a的列(示例:) Info/Data.显然我不能命名这样的属性所以我想我可以使用column属性([Column("Info/Data")])映射输出:

[Column("Info/Data")]
public string InfoData
{
   get { return infoData; }
   set { infoData= value; }
}
Run Code Online (Sandbox Code Playgroud)

我甚至尝试使用verbatim运算符([Column(@"Info/Data")]),用[]([Column("[Info/Data]")])包装文本,我尝试了两个([Column(@"[Info/Data]")]).单步执行代码时,我看到分配了具有匹配列名的属性,但是在分配期间会忽略具有column属性的属性.

我还为实体的每一列尝试了fluent-api.

    modelBuilder.ComplexType<Result>().Property(d => d.InfoData).HasColumnName("Info/Data");
Run Code Online (Sandbox Code Playgroud)

但是会抛出以下异常:

数据读取器与指定的"NameSpace.Result"不兼容.类型为"InfoData"的成员在数据读取器中没有具有相同名称的相应列.

在我的项目中NameSpace.Result是一个类(名称已更改为安全性),并且InfoDatais是我尝试使用fluent-api映射的属性(相应的sql列中包含/; ex:Info/Data).

有没有人遇到过这个问题?

如果我的问题不明确或者之前有人问过,请告诉我.

.net c# entity-framework

12
推荐指数
1
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

entity-framework ×1