gpt4 book ai didi

codefluent - 如何加载 PersistentList 类型的属性包含数组参数中的一个或多个值的实体?

转载 作者:行者123 更新时间:2023-12-01 13:49:15 26 4
gpt4 key购买 nike

我的模型包含以下枚举和实体:

<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&lt;Language&gt;">
<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)))

问题一:我怎样才能达到预期的结果?我应该创建一个 Language 实体并指定 Person 和 Language 之间的 1:n 关联吗?我不想有一个语言实体。或者我可以指定 Languages 属性必须转换为与表值参数 ( cf_type_Person_LoadPersonThatSpeaksOneOrMoreLanguages_0 ) 相同的类型吗?

问题二:出品PersonCollection类包含方法 LoadPersonThatSpeaksOneOrMoreLanguages .该方法的参数类型为Language[] .我想要一个 IEnumerable<Language> 而不是数组.我如何在我的 XML 模型中指定它?

最佳答案

问题一

PersistentList 旨在存储一组简单值(int、string、enum、...),但不能直接在 SQL 中查询它们。实际上,PersistentList 被转换为数据库中的 NVARCHAR 列,并且该列包含类似 EN|NL 的值(管道分隔值)。数据库引擎不知道如何从字符串中提取单个值。也许您可以使用 cf_SplitString 函数从列值创建一个表并用它做您想做的事,但这似乎不是最简单的解决方案...

根据您的需要,您可以使用多值枚举:

<cf:enumeration name="Language" flags="true">
<cf:enumerationValue name="Unspecified" /> <!-- value=0 -->
<cf:enumerationValue name="EN" /> <!-- value=1 -->
<cf:enumerationValue name="NL" /> <!-- value=2 -->
<cf:enumerationValue name="FR" /> <!-- value=4 -->
</cf:enumeration>

您可以将它们与 CFQL 一起使用:

-- Load Persons that speak the specified language
LOAD(Languages) WHERE (Languages & @Languages) = @Languages

-- Load Persons that speak at least one of the specified language
LOAD(Languages) WHERE (Languages & @Languages) <> 0

当然,最新的可能性是创建语言实体并使用表值参数。

http://blog.codefluententities.com/2014/07/16/persistent-list/ http://www.softfluent.com/documentation/Enumerations_Overview.html

问题二

来自official blog CodeFluent 实体的数量:

enter image description here enter image description here

关于codefluent - 如何加载 PersistentList 类型的属性包含数组参数中的一个或多个值的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33219043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com