0

我期望该Exists<>()函数将检查数据库中是否存在数据:

if (!Service.Db.Exists<Poco.ApplicationObject>(applicationObject))
{
    Service.Db.Insert(applicationObject);
} 

但我System.NotImplementedException在运行这段代码时得到了。

OrmLiteReadExtensions.cs 中

private static bool HasChildren<T>(this IDbCommand dbCmd, object record, string sqlFilter, params object[] filterParams)
{
  string str = OrmLiteConfig.DialectProvider.ToExistStatement(typeof (T), record, sqlFilter, filterParams);
  dbCmd.CommandText = str;
  return dbCmd.ExecuteScalar() != null;
}

它在 中实施ServiceStack.OrmLite.SqlServer吗?

4

1 回答 1

1

不,该ToExistStatement方法尚未在 OrmLite.SqlServer 方言中实现,但这可能是因为T-SQLExists方法适用于子查询,而不是按照您想要的方式检查记录的存在,这是为了避免混淆。

如果您阅读方言提供程序,您将找不到该ToExistStatement方法。

实际上,您正在寻找一种方法来执行此操作:

从应用程序对象中选择前 1 个 id,其中 id = ?;

您可以编写一个ToExists创建SELECT TOP 1SQL 的方法来获得此功能。您需要创建一个自定义SqlServerOrmLiteDialect并告诉您的连接使用它。

public class MyCustomSqlServerOrmLiteDialectProvider : SqlServerOrmLiteDialectProvider
{
    public static new MyCustomSqlServerOrmLiteDialectProvider Instance = new MyCustomSqlServerOrmLiteDialectProvider();

    public override string ToExistStatement(Type fromTableType, object objWithProperties, string sqlFilter, params object[] filterParams)
    {
        // return "SELECT TOP 1 ..."
        throw new NotImplementedException();
    }
}
于 2014-03-17T13:46:54.193 回答