2

他の関数を呼び出す LINQ to Entity クエリを記述できればと思います。

from c in context.Widgets
where MyFunc(c.name)
select c

MyFunc を呼び出す TSQL に式を変換できないため、エラーが発生します。

MyFunc がユーザー定義関数または (まだ良いと思いますが) SQL/CLR 関数でない限り、私は考えています。

これは可能ですか?また、推奨されますか?

それが不可能な場合、この機能を有効にしたいという私の願望は有効であり、ADO.NET の将来によって対処される可能性がありますか?

4

2 に答える 2

3

データベースにユーザー定義関数を作成MyFuncし、XML とコンテキスト クラスの部分クラスのスタブの両方で、手動でコンテキスト (edmx、したがってデータベースが最初) に "インポート" する必要があります。手順は次のとおりです。

カスタム データベース関数の使用方法(「StorageNamespace」は、.xml の下の XML ファイルにある名前空間であることに注意してください<edmx:StorageModels><Schema Namespace=...

MSDNにも同様の説明があります。

于 2012-05-16T23:19:44.463 に答える
0

EF は、.net クラスをデータベースの構造と同期させることを得意としており、データベースが機能せず、すべてのロジックがクラス内にある場合に最適です。

ただし、関数とストアド プロシージャにマップすることはできます。説明するのは少し技術的です (はるかに簡単です)。リンクをいくつか見つけさせてください。

これを行う悪い方法は次のとおりです。

// Query that calls the OrderTotal function to recalculate the order total.
string queryString = @"USING Microsoft.Samples.Entity;
    FUNCTION OrderTotal(o SalesOrderHeader) AS
    (o.SubTotal + o.TaxAmt + o.Freight)

    SELECT [order].TotalDue AS currentTotal, OrderTotal([order]) AS calculated
    FROM AdventureWorksEntities.SalesOrderHeaders AS [order]
    WHERE [order].Contact.ContactID = @customer";

int customerId = 364;


using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    ObjectQuery<DbDataRecord> query = new ObjectQuery<DbDataRecord>(queryString, context);
    query.Parameters.Add(new ObjectParameter("customer",customerId));

    foreach (DbDataRecord rec in query)
    {
        Console.WriteLine("Order Total: Current - {0}, Calculated - {1}.", 
            rec[0], rec[1]);
    }
}

http://msdn.microsoft.com/en-us/library/dd490951.aspx

適切に行う方法は次のとおりです。

http://scipbe.wordpress.com/2010/08/30/stored-procedures-udfs-in-the-entity-framework-part-1/

于 2012-05-16T20:13:55.247 に答える