【问题标题】:How to create more complex models from many tables in asp.net mvc, linq如何从 asp.net mvc、linq 中的许多表创建更复杂的模型
【发布时间】:2009-09-10 09:17:59
【问题描述】:

我知道在 SOF 上有一些这样的问题,但如果有人能用例子简洁地回答它,我很感兴趣。

我是 linq 和 mvc 的新手,虽然很多东西都在坚持,但我发现很难想象我可以用数据做很多事情。这是一个例子。

假设我有 5 个表,其中一些有关系,一些没有。

我希望所有这些表中的数据都出现在我的视图中。

我应该将所有这些数据添加到模型中,并在那个阶段全部传递,还是在稍后的某个时间进行?我可以想象如何创建一个包含所有这些信息的数据集,并将其提取到视图中,但感觉不对。

我也可以想象发出 5 个单独的 sql 请求,但感觉它会违反 mvc 模式,而且我不确定所有这些将如何发送到视图,除非它们都形成一个模型。 (但是我有兴趣这样做,因为我相信这将是一种克服 linq 可能存在的性能问题的方法,但在我也有之前不会扩展,我只是喜欢它会带来的权力的想法。

我们将不胜感激任何帮助,或对教程的建议,让我在这些方面感觉更自在。

提前致谢。

这是我目前正在尝试使用的一些模型代码,在书呆子晚餐术语中

 public IQueryable<Dinner> GetAllUserDinnersAndRSVP(string userId)
    {
        return from dinner in db.Dinners
               where dinner.userId == userId

               join rsvp in db.Dinners
               on userId equals rsvp.userId
               select dinner;
    }

但是当我在视图中列出该模型中的所有项目时,我也无法让它循环遍历 rsvp 记录。

不确定这是否是一个有用的例子!!

【问题讨论】:

  • 澄清一下:MVC 模式不包括数据访问。这是一种 UI 模式。您的问题仍然有效。

标签: c# asp.net-mvc linq


【解决方案1】:

我刚刚解决了这个问题,我有一个订单表(1 行)和一个订单项表(多行),并希望显示 1 个视图 - 发票!

这是一个例子:

actionResults 测试中的代码(字符串引号)

 ViewData["quoteid"] = quoteid;

        var model = new QuoteViewModel
        {
            quoteInfo = new_online_quote.SingleOrDefault(x => x.quoteid == Convert.ToInt32(quoteid)),
            quoteItems = new_quote_item.Find(x => x.quote_id == Convert.ToInt32(quoteid))
        };

        return View(model);

然后我在 controllerClass 之外有一个新类,但在同一页面中

public class QuoteViewModel
{
    public new_online_quote quoteInfo { get; set; }
    public IEnumerable<new_quote_item> quoteItems { get; set; }
}

quoteItems 是 IENumerable,因为它将是我将要从中移动的项目列表等。

在实际页面上我只是创建了一个普通视图,不是强类型的,但你可以这样做。

在页面顶部我有这个

Inherits="System.Web.Mvc.ViewPage<namespace.Controllers.QuoteViewModel>"

这继承了我的类:

现在我可以像这样访问两个类和数据:

Total Quote Cost <%=String.Format("{0:C}",Model.quoteInfo.totalcost) %> inc VAT @ 15%<br />

您的物品:

再次注意,我可以在我的 quoteItems 上使用 for each 并将所有记录放在一起。

希望这会有所帮助,我对 MVC 和这种编码真的很陌生,但以上内容是在本论坛的帮助下整理的,因此只有将其传递回去的权利。

【讨论】:

  • 酷,非常感谢!必须手动构建模型,这肯定是要到位的。
  • 如果这对您有所帮助,您能否将其标记为答案,谢谢
猜你喜欢
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多