我期望Exists<>()
函数将检查数据库中是否存在数据:
if (!Service.Db.Exists<Poco.ApplicationObject>(applicationObject))
{
Service.Db.Insert(applicationObject);
}
但运行此代码时我得到System.NotImplementedException
。
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
?
答案 0 :(得分:1)
OrmLite.SqlServer方言中没有实现ToExistStatement
方法,但这可能是因为T-SQL Exists
method applies to subqueries而不是以你想要的方式检查记录的存在,这是为了避免混淆。
如果您read the dialect provider,则无法找到ToExistStatement
方法。
有效地,您正在寻找一种方法:
SELECT TOP 1 id FROM applicationObjects WHERE id =?;
您可以编写ToExists
方法来创建SELECT TOP 1
SQL以获得此功能。您需要创建自定义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();
}
}