私のモデルには、次の列挙とエンティティが含まれています。
<cf:enumeration name="Language" usePersistenceDefaultValue="false">
<cf:enumerationValue name="EN" value="1" default="true" />
<cf:enumerationValue name="NL" value="2" />
<cf:enumerationValue name="DE" value="3" />
</cf:enumeration>
<cf:entity name="Person" >
<cf:property name="Id" key="true" />
<cf:property name="Languages" typeName="CodeFluent.Runtime.Utilities.PersistentList<Language>">
<cf:message class="_doc">The languages that the person speaks</cf:message>
</cf:property>
<cf:method name="LoadPersonThatSpeaksOneOrMoreLanguages" checkLevel="None" memberAttributes="Public" >
<cf:body language="tsql" text="load(Language[] languages) from Person where Languages in (@languages)" />
</cf:method>
</cf:entity>
メソッド LoadPersonThatSpeaksOneOrMoreLanguages は、提供された言語の 1 つ以上を話すすべての人を返す必要があります。このメソッドに対して生成されたストアド プロシージャは正しくないようです:
ALTER PROCEDURE [dbo].[Person_LoadPersonThatSpeaksOneOrMoreLanguages]
(
@languages [dbo].[cf_type_Person_LoadPersonThatSpeaksOneOrMoreLanguages_0] READONLY,
@_orderBy0 [nvarchar] (64) = NULL,
@_orderByDirection0 [bit] = 0
)
AS
SET NOCOUNT ON
DECLARE @_c_languages int; SELECT @_c_languages= COUNT(*) FROM @languages
SELECT DISTINCT [Person].[Person_Id], ...
FROM [Person]
WHERE [Person].[Person_Languages] IN (((SELECT * FROM @languages)))
質問 1: どうすれば望ましい結果を得ることができますか? Language エンティティを作成し、Person と Language の間に 1:n の関連付けを指定する必要がありますか? 私は言語エンティティを持たないことを好みます。または、Languages プロパティをテーブル値パラメーター ( ) と同じ型に変換する必要があることを指定できますcf_type_Person_LoadPersonThatSpeaksOneOrMoreLanguages_0
か?
質問 2: 生成されPersonCollection
たクラスにメソッドが含まれていますLoadPersonThatSpeaksOneOrMoreLanguages
。このメソッドのパラメーターの型はLanguage[]
です。配列の代わりに、IEnumerable<Language>
. XML モデルでこれを指定するにはどうすればよいですか?