【问题标题】:Left join with Code First MVC 4 EF4.1使用 Code First MVC 4 EF4.1 左连接
【发布时间】:2012-07-07 18:07:27
【问题描述】:

我正在创建一个系统,用户可以在其中完成一些设置来完成他们的帐户,见下文:

表格:

设置类型

  1. 身份证
  2. 姓名

设置

  1. 身份证
  2. FkSettingTypeId
  3. IsEmailActivated
  4. IsSMS已激活
  5. 间隔通知

所以 SettingsType 表有这些值:

  1. 时间快结束时发出警告
  2. 收到有关我的类别中的优惠的警告
  3. ...

回到我的 MVC4 应用程序,我需要创建一个控制器,该控制器将返回带有设置的每个 SettingsType 以获取一个 html 表,用户可以在其中选择是否要接收每个 SettingsType 的电子邮件和短信。

我使用带有 CodeFirst 的 Entity Framework 4.1,一个普通的页面会返回这样的表对象:

public ActionResult Index()
    {
        var settings = db.Settings.Include(s => s.SettingsType);
        return View(settings.ToList());
    }

include 语句进行内部连接,并且不返回我需要与设置关联的所有 SettingsType。

我如何编写代码来进行左连接或右连接,并让正确的模型像这样传递到我的视图中:

@model IEnumerable<TenderSystem.Models.Setting>

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.SettingsType.Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.IsEmailActivated)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.IsSMSActivated)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.IntervalNotification)
    </td>
</tr>}

我尝试了很多类似这些链接的东西:

  1. Entity Framework Code First Left Join
  2. Fluent API Samples

但我无法达到我的期望。

总而言之,我还使用 SQL 到 LINQ 转换器工具将我非常简单的 SQL 左连接转换为 LINQ,并且可能会将我可以使用的对象返回到我的视图中,但我收到了这个错误:仅支持无参数构造函数和初始化程序在 LINQ to Entity 中。

需要您的帮助来了解如何处理这种情况。

非常感谢

【问题讨论】:

    标签: asp.net-mvc razor ef-code-first left-join


    【解决方案1】:

    我认为 Include 可以只是孩子的模型名称,作为一个构造函数下的字符串。这是 EF5 的链接。

    http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k("System.Data.Entity.Infrastructure.DbQuery`1.Include");k(Include);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5);k(DevLang-csharp)&rd =真

    或缩短... http://bit.ly/SOEttF

    我正在使用 WebAPI,所以返回需要一个 IQueryable,这对我有用。

        [AcceptVerbs("GET")]
        public IQueryable<Run> Runs()
        {
            var rx  = _contextProvider.Context.Runs
                .Include("RunOutlineItems")
                .AsQueryable()
                .Where(r => r.RunStatusId < 4);
    
            return rx;
        }
    

    也检查这个答案 Join and Include in Entity Framework

    【讨论】:

      猜你喜欢
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多