我在映射文件中使用以下公式:

使用(nolock)从表SI中选择前1个SI.ID,其中SI.GUID = GUID和SI.IsArchive ='0'

生成的sql是:
使用(this_.nolock)从表SI中选择前1个SI.ID,其中SI.GUID = this_.GUID和SI.IsArchive ='0'

nolock是一个关键字。我不希望它具有this _。(template关键字)的资格。

我该如何改变这种行为?

最佳答案

您可以尝试将公式逻辑重构为用户定义的函数(假设此处是sql server),然后直接从公式中调用它。您甚至可以通过使用数据库对象映射使函数成为模式生成的一部分。

例如:

    CREATE FUNCTION [dbo].[GetMyValue] ( @entityId INT )
    RETURNS INT
    AS BEGIN
      DECLARE @RtnValue AS INT
      SELECT @RtnValue = top 1 SI.ID from Table SI with(nolock) where SI.id = @entityId AND SI.IsArchive = '0'
      RETURN @RtnValue
    END


和这样的地图

formula="dbo.GetMyValue(id)"


从理论上讲,这应该可以防止发生任何形式的关键字替换。

关于nhibernate - Nhibernate公式将模板字附加到sql关键字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3333054/

10-13 09:11