Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC,不处理Entities对象以便您可以使用它来深入研究外键值是否是一种不好的做法?_C#_Entity Framework_Asp.net Mvc 2 - Fatal编程技术网

C# MVC,不处理Entities对象以便您可以使用它来深入研究外键值是否是一种不好的做法?

C# MVC,不处理Entities对象以便您可以使用它来深入研究外键值是否是一种不好的做法?,c#,entity-framework,asp.net-mvc-2,C#,Entity Framework,Asp.net Mvc 2,我是MVC新手。 在我看过的教程中,他们说,在实体对象传递到视图后处理它是一种很好的做法。就像这样 using(MyProjectEntities db = new MyProjectEntities) { return View(db.PersonAddresses.ToList()); } 但是,我不想只显示Person的ID和PersonalAddress表中链接的地址记录。我想要整个shebang,当我在我的视图中执行以下操作时,我会得到一个错误 <% foreach (

我是MVC新手。 在我看过的教程中,他们说,在实体对象传递到视图后处理它是一种很好的做法。就像这样

using(MyProjectEntities db = new MyProjectEntities)
{
    return View(db.PersonAddresses.ToList());
}
但是,我不想只显示Person的ID和PersonalAddress表中链接的地址记录。我想要整个shebang,当我在我的视图中执行以下操作时,我会得到一个错误

<% foreach (var item in Model) { %>

    <tr>
        <td>
            <%: item.Person.LastName + ", " + item.Person.FirstName %>
        </td>
        <td>
            <%: item.Address.AddressLine1+ "<br />" + item.Address.AddressLine2 %>
        </td>
        <td>
            <%: item.Room.RoomName %>
        </td>
        <td>
            <%: String.Format("{0:g}", item.Date) %>
        </td>
    </tr>

<% } %>
我的观点很好


是否有更好的方法将这些值传递给视图,以便我可以正确处理Entities对象?

最好不要直接从控制器访问数据层。我将创建一个单独的业务逻辑层或服务层,并从控制器调用它,而不是从控制器调用数据访问层。因此,用户界面层不会直接访问数据访问层。这个问题将是没有意义的。

一种方法是通过在LINQ查询中添加数据来“急切地”加载数据,这将预加载指定的数据,以便它准备就绪。

感谢您的提示!我的技能还没有完全准备好迈出这一步。在开始使用真正的业务层之前,我正在尝试掌握设置常用控件(如下拉列表和日历)的基础知识。哇,这太棒了,我不知道我能做到!很高兴为您提供一些信息,很高兴知道如何使用EF和延迟加载
MyProjectEntities db = new MyProjectEntities;
return View(db.PersonAddresses.ToList());