这是对以下内容的跟踪:https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes#3035624
最新的SS和.Net Core 5.x版本上的.NET Core空Web模板。
我正在尝试创建一个自动查询服务,该服务可以用一些合成字段(即不是来自数据库的字段)修饰。因此,我获得了带有以下数据传输对象的自动查询服务:
public class DataSource {
[Ignore]
public string Hello { get { return "Hello there"; }}
public string DataSourceId { get; set; }
public string DataSourceName { get; set; }
public int DataSourceSort { get; set; }
public bool DataSourceDisabled { get; set; }
public DateTime LastModified { get; set; }
}
当我不包括public string Hello
时,一切都正常。
该服务本身只是在线服务:
[Route("/query/datasources")]
public class QueryDatasources : QueryDb<DataSource> {}
这是我得到的错误:
Offset0Total0Response Status Error CodeInvalidOperationExceptionMessageSequence contains no matching elementStack Trace[QueryDatasources: 22/03/2019 17:47:41]: [REQUEST: {}] System.InvalidOperationException: Sequence contains no matching element at System.Linq.Enumerable.First[TSource](IEnumerable'1 source, Func'2 predicate) at ServiceStack.OrmLite.OrmLiteDialectProviderBase'1.GetLoadChildrenSubSelect[From](SqlExpression'1 expr) in C:\BuildAgent\work\27e4cc16641be8c0\src\ServiceStack.OrmLite\OrmLiteDialectProviderBase.cs:line 1616 at ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider.GetLoadChildrenSubSelect[From](SqlExpression'1 expr) in C:\BuildAgent\work\27e4cc16641be8c0\src\ServiceStack.OrmLite.SqlServer\SqlServerOrmLiteDialectProvider.cs:line 587 at ServiceStack.OrmLite.Support.LoadList'2..ctor(IDbCommand dbCmd, SqlExpression'1 q) in C:\BuildAgent\work\27e4cc16641be8c0\src\ServiceStack.OrmLite\Support\LoadList.cs:line 46 at ServiceStack.OrmLite.OrmLiteReadCommandExtensions.LoadListWithReferences[Into,From](IDbCommand dbCmd, SqlExpression'1 expr, IEnumerable'1 include) in C:\BuildAgent\work\27e4cc16641be8c0\src\ServiceStack.OrmLite\OrmLiteReadCommandExtensions.cs:line 957 at ServiceStack.OrmLite.OrmLiteExecFilter.Exec[T](IDbConnection dbConn, Func'2 filter) in C:\BuildAgent\work\27e4cc16641be8c0\src\ServiceStack.OrmLite\OrmLiteExecFilter.cs:line 64 at ServiceStack.TypedQuery'2.Execute[Into](IDbConnection db, ISqlExpression query) in C:\BuildAgent\work\3481147c480f4a2f\src\ServiceStack.Server\AutoQueryFeature.cs:line 1089
答案 0 :(得分:1)
问题是因为您的数据模型没有显式的主键。
在OrmLite中,每个模型都必须具有一个主键,按照惯例OrmLite希望将其命名为Id
,并且您可以使用[Alias("DbFieldName")]
属性将其映射到具有不同名称的列或使用[PrimaryKey]
属性,告诉OrmLite为主键使用其他属性。
如果您的模型没有显式的[PrimaryKey]
属性,它将使用模型上的第一个[AutoIncrement]
或[AutoId]
,如果不存在这些属性,则退回到使用第一个属性作为主键,在这种情况下是被忽略的属性。
我已经从this commit中删除了忽略的属性,但是应该明确在哪个字段中用作主键(使用上述任何属性或Id
命名约定),而不是依靠OrmLite的后备启发式方法。