1

我正在创建一个系统,用户需要做一些设置来完成他们的帐户,见下文:

表:

设置类型

  1. ID
  2. 姓名

设置

  1. ID
  2. FkSettingTypeId
  3. IsEmail 已激活
  4. 是否已激活短信
  5. 间隔通知

所以 SettingsType 表有这些值:

  1. 如果时间快到了,请注意
  2. 请注意我的类别中的优惠
  3. ...

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

我将 Entity Framework 4.1 与 CodeFirst 一起使用,普通页面将返回如下表对象:

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

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

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

@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. 实体框架代码先左连接
  2. Fluent API 示例

但我无法达到我的期望。

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

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

非常感谢

4

1 回答 1

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=true

或缩短... 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

于 2012-12-18T23:49:38.833 回答