プログラムに Entity Framework 4 エンティティ モデルがあります。SQL Anywhere 12.0.1 データベースで定義した次のストアド関数がありますGuidToPrefix
。
CREATE OR REPLACE FUNCTION GuidToPrefix( ID UNIQUEIDENTIFIER ) RETURNS INT AS
BEGIN
RETURN CAST( CAST( ID AS BINARY(4) ) AS INT )
END;
このMSDN 記事の指示に従って、関数を EDMX に追加しました。
<Function Name="GuidToPrefix" ReturnType="int" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="DBA">
<Parameter Name="ID" Type="uniqueidentifier" Mode="In" />
</Function>
正直なところ、データベースからモデルを更新し、ウィザードの最初のタブのリストで機能をチェックしました。それが違いを生むかどうかはわかりませんが、なぜそうなるのかわかりません。
記事によると、C# クラスに関数の定義を追加する必要があります。私の問題は、それをどのクラスに入れるかを教えてくれないことです。まったく新しいクラスを追加しますか? 新しい .CS ファイルを作成して、次のようにしますか?
public static DbFunctions {
[EdmFunction( "CarSystemModel.Store", "GuidToPrefix" )]
public static int GuidToPrefix( Guid id ) {
throw new NotSupportedException( "Direct calls to GuidToPrefix are not supported." );
}
}
それともエンティティクラスの部分に入れますか?
partial MyEntities {
[EdmFunction( "CarSystemModel.Store", "GuidToPrefix" )]
public static int GuidToPrefix( Guid id ) {
throw new NotSupportedException( "Direct calls to GuidToPrefix are not supported." );
}
}
このエンティティ モデルが使用されている 2 つのプロジェクトがあります。1 つはクラス ライブラリで、モデルはその中で定義されています。もう 1 つは、それを使用する別のソリューションの別のクラス ライブラリです。上記の両方の例を試しましたが、2 番目のクラス ライブラリのクエリは、どちらの場合もコンパイラからこのエラーを生成します。
The name 'GuidToPrefix' does not exist in the current context
明らかに、私は正しいことをしていません。誰かがこれを試して動作させましたか?