0

我有 3 层应用程序。

在 Persistance 层中,只是拖放 Entities.edmx 文件。

在表示层:

<asp:ObjectDataSource ID="ObjectDataSource_Tva" runat="server" 
        DeleteMethod="del_Tva" InsertMethod="Inst_Tva" 
        SelectMethod="Get_All_Tva" 
        TypeName="FaExped_BackEnd_WebApp_Business.Le_T.LeTVA_Entite_BL" 
        UpdateMethod="Updt_Tva">
    <DeleteParameters>
        <asp:Parameter Name="Id" Type="Int32" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="Id" Type="Int32" />
        <asp:Parameter Name="Libelle" Type="String" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="Id" Type="Int32" />
        <asp:Parameter Name="Libelle" Type="String" />
    </UpdateParameters>
</asp:ObjectDataSource>

还有一个连接到这个objectdatasource的gridview。

在我的业务逻辑层中,当我像这样使用它时:

public IEnumerable<T_TVA> Get_All_Tva()
{
    FaExpedEntities oEntite_T = new FaExpedEntities();
    var query = from o in oEntite_T.T_TVA select o;
    IEnumerable<T_TVA> LesTva = query;
    return LesTva;       
}

它有效,但是当我这样使用时:

public IEnumerable<T_TVA> Get_All_Tva()
{
    using (FaExpedEntities oEntite_T = new FaExpedEntities())
    {
        var query = from o in oEntite_T.T_TVA select o;
        IEnumerable<T_TVA> LesTva = query;
        return LesTva;
    }         
}

这没用。它表示 的实例ObjectContext已被删除,不能用于需要连接的操作。

为什么?

using使用“ ”语法失败和不使用“ ”有什么区别using

有或没有“”,哪种方法更好using

4

1 回答 1

1

我怀疑您对包含该using语句的代码的错误是由于延迟执行造成的。本质上,这意味着在执行 LINQ 查询以检索结果之前,数据库连接已关闭。

一种常见的解决方法是使用非延迟运算符(如ToList().

MSDN 上有很多关于延迟执行的 文章,适用于所有类型的 LINQ,而不仅仅是将 LINQ 与实体框架一起使用。

于 2011-03-07T11:17:01.807 回答