我正在尝试从我站点存储库中的 objectcontext 对象调用 ObjectContext.ExecuteFunction。
存储库是通用的,所以我所拥有的只是一个 ObjectContext 对象,而不是一个实际代表我的实体框架中的特定对象的对象。
下面是使用 ExecuteFunction 方法生成的代码示例:
[global::System.CodeDom.Compiler.GeneratedCode("System.Data.Entity.Design.EntityClassGenerator", "4.0.0.0")]
public global::System.Data.Objects.ObjectResult<ArtistSearchVariation> FindSearchVariation(string source)
{
global::System.Data.Objects.ObjectParameter sourceParameter;
if ((source != null))
{
sourceParameter = new global::System.Data.Objects.ObjectParameter("Source", source);
}
else
{
sourceParameter = new global::System.Data.Objects.ObjectParameter("Source", typeof(string));
}
return base.ExecuteFunction<ArtistSearchVariation>("FindSearchVariation", sourceParameter);
}
但我想做的是这样的......
public class Repository<E, C> : IRepository<E, C>, IDisposable
where E : EntityObject
where C : ObjectContext
{
private readonly C _ctx;
// ...
public ObjectResult<E> ExecuteFunction(string functionName, params[])
{
// Create object parameters
return _ctx.ExecuteFunction<E>(functionName, /* parameters */)
}
}
任何人都知道为什么我必须打电话ExecuteFunction
而base
不是_ctx
?
另外,有没有办法像我写的那样做?我真的很想保持我的存储库通用,但是由于必须执行存储过程,它看起来越来越困难......
更新:这是我尝试过的方法,但该方法没有出现在智能感知中/当我尝试使用它进行编译时它给了我一个错误
public ArtistSearchVariation findSearchVariation(string source)
{
System.Data.Objects.ObjextContext _ctx = new ObjectContext(/* connection string */);
System.Data.Objects.ObjectParameter sourceParam = new ObjectParameter("Source", source);
return _ctx.ExecuteFunction<ArtistSearchVariation>("FindSearchVariation", sourceParam);
}
谢谢,
马特