gpt4 book ai didi

c# - 将过程结果从 Entity Framework 传递到 View

转载 作者:行者123 更新时间:2023-11-29 13:48:44 25 4
gpt4 key购买 nike

目标

我正在使用带有 C# + ASP.NET MVC 4 的 Entity Framework ,并且我的数据库 (MySQL) 中有一个存储过程。我想在我的 View 中显示此过程的结果。

问题:我不知道语法。

我所拥有的:在我的数据库上下文(由 Entity Framework 自动生成)上有以下代码:

public partial class BluMercadosContext : DbContext
{
public BluMercadosContext()
: base("name=BluMercadosContext")
{
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}

[...]

public virtual ObjectResult<getProductsListForHome_Result> getProductsListForHome(Nullable<int> inOffer, Nullable<int> categoryId)
{
var inOfferParameter = inOffer.HasValue ?
new ObjectParameter("inOffer", inOffer) :
new ObjectParameter("inOffer", typeof(int));

var categoryIdParameter = categoryId.HasValue ?
new ObjectParameter("categoryId", categoryId) :
new ObjectParameter("categoryId", typeof(int));

return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<getProductsListForHome_Result>("getProductsListForHome", inOfferParameter, categoryIdParameter);
}
}

如您所见,有一个名为 getProductsListForHome 的方法,它有两个参数。我想执行这个过程,然后在我的 View 上显示结果。

我必须通过 Controller (MVC)或直接从模型传递结果到我的 View (MVVM)?

提前致谢。

最佳答案

快速而肮脏的方法:

在 Controller 中调用 getProductsListForHome 方法:

public ActionResult ProductList(SomeType SomeParamIfYouNeed)
{
using (BluMercadosContext context = new BluMercadosContextEntities())
{
ObjectSet<Product> query = context.Products;
ObjectResult<Product> queryResult = query.Execute(MergeOption.AppendOnly);
}

return PartialView("ProductList", queryResult);
}

更好的方法:

ModelBuilder 中调用 getProductsListForHome 方法。这样,您的 Controller 就可以保持干净(始终记住规则: Controller 方法不应超过 15 行代码!)
以下示例确实使用 IOC 在运行时将 IProductBuilder 与正确的实现绑定(bind)在一起(您不必执行相同的操作,只需直接使用正确的实现即可)

ProductController

public ProductController(IProductBuilder productBuilder)
{
_productBuilder = productBuilder;
}

public ActionResult ProductList(SomeType SomeParamIfYouNeed)
{
var model = _productBuilder.Get(SomeParamIfYouNeed);

return PartialView("ProductList", model);
}

ProductBuilder

public List<Product> Get (SomeType SomeParamIfYouNeed)
{
using (BluMercadosContext context = new BluMercadosContextEntities())
{
ObjectSet<Product> query = context.Products;
ObjectResult<Product> queryResult = query.Execute(MergeOption.AppendOnly);
}

return queryResult;
}

更好的方法:

ProductService 中调用 getProductsListForHome 方法。 SOC 会更好。 ProductController 将负责将 model 返回到 viewProductBuilder 将负责映射在 ProductService 返回的业务/域对象和 viewmodel 之间,最后,ProductService 将负责调用 getProductsListForHome 方法。

ProductController

public ProductController(IProductBuilder productBuilder)
{
_productBuilder = productBuilder;
}

public ActionResult ProductList()
{
var model = _productBuilder.Get();

return PartialView("ProductList", model);
}

ProductBuilder

public ProductBuilder(IProductService productService)
{
_productService = productService;
}

public List<Product> Get ()
{
// Rather than returning the _productService method call, you could do some mapping between what is returned and the model your view needs.
return _productService.GetProducts();
}

ProductService

public List<Product> GetProducts()
{
using (BluMercadosContext context = new BluMercadosContextEntities())
{
ObjectSet<Product> query = context.Products;
ObjectResult<Product> queryResult = query.Execute(MergeOption.AppendOnly);
}

return queryResult;
}

如果您将这段代码复制粘贴到项目中,它显然可能无法编译。它的目的是向您展示处理这种情况的不同方法!

关于c# - 将过程结果从 Entity Framework 传递到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17030058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com