0

私は3層のアプリを持っています。

パーシスタンスレイヤーでは、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に接続するグリッドビュー。

私のビジネスロジックレイヤーでは、次のように使用します。

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クエリが実行される前にデータベース接続が閉じられていることを意味します。

一般的な回避策の1つは、のような非遅延演算子を使用してLINQクエリをすぐに実行するように「強制」することToList()です。

Entity FrameworkでLINQを使用するだけでなく、すべてのタイプのLINQに適用される遅延実行に関するMSDNに関する優れた 記事がたくさんあります。

于 2011-03-07T11:17:01.807 に答える