【问题标题】:How to pass Dbset object as a parameter to any user define function in entity framework code first?如何首先将 Dbset 对象作为参数传递给实体框架代码中的任何用户定义函数?
【发布时间】:2015-05-20 07:19:56
【问题描述】:

我想将 Dbset 对象 传递给我的方法。

这是我的方法:

public static class MyClass
    {
       public static Floor ReturnObject(this DbSet<Floor> floor, int Id)
        {
           var context = floor.passContext() as MyDBContext;
           var data = context.floors.Where(a =>a.Id == Id).FirstOrDefault();
           return ad;
        }
     }

   public class MyDBContext: DbContext
    {
          public DbSet<Floor> floors { get; set; }
    }

public static DbContext passContext<TEntity>(this DbSet<TEntity> dbSet)
            where TEntity : class
        {
                 //code....
        }

现在我想使用我的 static class MyClass 方法,即 ReturnObject

我想在我的控制器中使用 ReturnObject 方法。

我知道我可以在我的控制器中像这样声明它为私有成员:

这是我的控制器:

public class MyController
{
       private DbSet<Floor> floor;//but is this a good way???
         public ActionResult Index(int Id)
            {
              var data=MyClass.ReturnObject(????,Id)//what should come in place of question mark??
            }
}

我应该如何将我的第一个参数传递给 ReturnObject 方法???

【问题讨论】:

  • 您必须传入一个 DbSet 来获取上下文,此时您可以查询该 dbset,您是在复制示例吗?您可以使用 using(var context = new passContext()) 创建新上下文,也可以使用 AutoFac、Unity 等 IoC 容器,这是最佳实践
  • @Maria Pithia 为什么要通过它?这个方法会用这个做什么?是否要过滤此 DbSet 中的数据?
  • @MairajAhmad:我想按 ID 从我的桌面获取数据。
  • 这里可以直接获取数据。但是如果你想从这里返回数据,你不需要传递它,你可以直接从那个方法返回数据。请在您的问题中添加 ReturnObject 的代码。
  • @PaulMcCowat:先生,我已经用这个 using(var context = new passContext()) 更新了我的楼层表中的两个字段和一些值 amd 只是为了获取记录并没有给我新更新的值field.the value of that two new updated fields are always come 0 when fetching records 这就是为什么我会这样

标签: asp.net-mvc entity-framework ef-code-first code-first dbset


【解决方案1】:

更改您的ReturnObject 方法。它应该只接受Id作为参数和过滤数据而不是Floor的返回对象。

public static Floor ReturnObject(int Id)
{
  using(MyDBContext context = new  MyDBContext())
  {
       var data = context.floors.Where(a =>a.Id == Id).FirstOrDefault();
       return ad;
   }
}

当你调用它时,不仅仅是传递 id 作为参数

var data=MyClass.ReturnObject(Id);

这将返回存储在data中的楼层对象。

【讨论】:

  • 抱歉 Returnobject 是许多控制器中使用的常用方法,因此更改其参数需要在每个控制器中进行更改,我已经为您为解决我的问题所做的努力而支持您的回答
  • @MariaPithia 好的,我明白我会更新我的答案。
  • 如果它是通用的,为什么你在这里硬编码地板?我的意思是这也将是动态的,不是吗?
  • 请阅读我为@paul 写的 cmets。感谢您为帮助我所做的努力
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多