C# 使用POCO作为EntityFramework存储过程的参数对象

C# 使用POCO作为EntityFramework存储过程的参数对象,c#,entity-framework,stored-procedures,parameter-object,C#,Entity Framework,Stored Procedures,Parameter Object,我想使用一个类示例: public class ClassA { public int ID {get;set;} public string Name {get;set;} } 作为要传递给存储过程的参数对象 这将是我的电话样本 List<ClassB> result = this.Database.SqlQuery<ClassB>("GetSomeList", ClassA).ToList<ClassB>(); List resul

我想使用一个类示例:

public class ClassA
{
     public int ID {get;set;}
     public string Name {get;set;}
}
作为要传递给存储过程的参数对象

这将是我的电话样本

List<ClassB> result = this.Database.SqlQuery<ClassB>("GetSomeList", ClassA).ToList<ClassB>();
List result=this.Database.SqlQuery(“GetSomeList”,ClassA.ToList();
存储过程中的参数名称将与“ClassA”的属性匹配

如果我删除parameters对象(ClassA),调用将正常工作并返回正确的结果。我不希望使用Entityframework designer或向实体添加任何DB属性,因为它们是可重用组件。 另外,如果这个参数对象可以用来保存输出参数,那也很好。 我还没有找到任何将POCO用作参数对象的好文档

这是EntityFramework6 MVC5的公共静态类DbExtensions{
public static class DbExtensions {
  public static object[] ToObjectArray(this ClassA ca) {
    return new object[]{ca.ID,ca.Name};
  }
}

List<ClassB> result=this.Database
  .SqlQuery<ClassB>("GetSomeList", ClassA.ToObjectArray())
  .ToList<ClassB>();
公共静态对象[]ToObject数组(此ClassA ca){ 返回新对象[]{ca.ID,ca.Name}; } } List result=this.Database .SqlQuery(“GetSomeList”,ClassA.ToObject数组()) .ToList();
公共静态类DbExtensions{
公共静态对象[]ToObject数组(此ClassA ca){
返回新对象[]{ca.ID,ca.Name};
}
}
List result=this.Database
.SqlQuery(“GetSomeList”,ClassA.ToObject数组())
.ToList();

据我所知,你不能那样做。至少我不相信我见过这样做。您可以在ClassA上创建一个扩展方法,这可能是您最好的方法。我有一个完整的对象库,希望使用不同的方法。除了我在原始帖子中定义的当前用法之外,是否有任何方法可以使用EF作为ORM和POCO参数对象来执行存储过程?您可以使用EF创建存储过程。但是,仍然不接受参数类。然后您可以
db.GetSomeList(ClassA.Id,ClassA.Name)
。如果将存储的过程创建/导入到dbContext中,可能有一种方法可以在扩展方法中使用反射。我没见过,但我不明白你为什么不能。这似乎更像是一个解决办法。有更好的ORM可供使用吗?或者我应该考虑在更“正常”的状态下使用实体框架。我不会说这是ORM的主要限制。只需导入存储过程并调用它们。它不太可能为您节省任何东西,因为您必须在调用中手动指定proc的名称,而且调用存储的proc可能会带来相当大的性能损失。据我所知,您无法做到这一点。至少我不相信我见过这样做。您可以在ClassA上创建一个扩展方法,这可能是您最好的方法。我有一个完整的对象库,希望使用不同的方法。除了我在原始帖子中定义的当前用法之外,是否有任何方法可以使用EF作为ORM和POCO参数对象来执行存储过程?您可以使用EF创建存储过程。但是,仍然不接受参数类。然后您可以
db.GetSomeList(ClassA.Id,ClassA.Name)
。如果将存储的过程创建/导入到dbContext中,可能有一种方法可以在扩展方法中使用反射。我没见过,但我不明白你为什么不能。这似乎更像是一个解决办法。有更好的ORM可供使用吗?或者我应该考虑在更“正常”的状态下使用实体框架。我不会说这是ORM的主要限制。只需导入存储过程并调用它们。它不太可能为您节省任何东西,因为您必须在调用中手动指定proc的名称,而且调用存储的proc可能会带来相当大的性能损失。据我所知,您无法做到这一点。至少我不相信我见过这样做。您可以在ClassA上创建一个扩展方法,这可能是您最好的方法。我有一个完整的对象库,希望使用不同的方法。除了我在原始帖子中定义的当前用法之外,是否有任何方法可以使用EF作为ORM和POCO参数对象来执行存储过程?您可以使用EF创建存储过程。但是,仍然不接受参数类。然后您可以
db.GetSomeList(ClassA.Id,ClassA.Name)
。如果将存储的过程创建/导入到dbContext中,可能有一种方法可以在扩展方法中使用反射。我没见过,但我不明白你为什么不能。这似乎更像是一个解决办法。有更好的ORM可供使用吗?或者我应该考虑在更“正常”的状态下使用实体框架。我不会说这是ORM的主要限制。只需导入存储过程并调用它们。这不太可能为您节省任何东西,因为您必须在调用中手动指定proc的名称,而且调用存储的proc可能会带来相当大的性能损失。