我的模型包含以下枚舉和實體:如何加載PersistentList類型的屬性包含數組參數中的一個或多個值的實體?
<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應該返回講所提供的語言的一個或多個的所有人員。 這種方法生成的存儲過程似乎並沒有被正確的:
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: 我怎樣才能達到預期的效果? 我應該創建一個語言實體並指定Person和Language之間的1:n關聯嗎?我更喜歡沒有語言實體。 或者我可以指定Languages屬性必須轉換爲與表值參數(cf_type_Person_LoadPersonThatSpeaksOneOrMoreLanguages_0
)相同的類型嗎?
問題2: 生成的PersonCollection
類包含方法LoadPersonThatSpeaksOneOrMoreLanguages
。該方法的參數類型爲Language[]
。我想要一個IEnumerable<Language>
而不是一個數組。我怎樣才能在我的XML模型中指定這個?
您應該添加一個'None' /'Unspecified' /'未知枚舉中的值爲'0'。在你的情況下,'EN'的值是'0',不能組合使用。也許這就解釋了爲什麼你不能在建模者中用特定的語言組合創建一個實例。 – meziantou
我更新了我的代碼示例中的枚舉以包含未指定。謝謝meziantou! – Dave