Joh*_*ohn 9 c# sql-server servicestack ormlite-servicestack
ServiceStack OrmLite究竟是如何处理默认和计算列的?
具体来说,我收到了错误
The column "PointsAvailable" cannot be modified because it is either a computed column or is the result of a UNION operator.
Run Code Online (Sandbox Code Playgroud)
此列配置为SQL Server 2008数据库中的计算列.
OrmLite似乎对计算列做了一些事情,因为您可以将属性'[ServiceStack.DataAnnotations.Compute]'添加到模型中的属性.
进入代码,调用'OrmLiteDialetBase.cs'中的函数'ToInsertRowStatement'.当该函数检查是否设置了AutoIncrement属性时,它不检查是否设置了IsComputed属性.
我不知道这是一个错误,还是我错了.
对于仅在服务层中计算的计算列,SQL对它们一无所知,因此我在servicestack模型上使用了以下属性的组合:
[Compute, ServiceStack.DataAnnotations.Ignore]
public List<MyModel> MyList {get;set;}
Run Code Online (Sandbox Code Playgroud)
差异似乎是"忽略"属性,它坚持要附加名称空间?? 有了这些,我的基本查询就会运行,否则SQL会抱怨列不存在 - 这就足够了!
您可以按照t-clausen.dk的建议,通过专门传递一个SQL CommandText字符串以及您想要的所有列名来使用SQL过滤器,但我认为这会打开一个维护问题.
至于查看数据库的错误修正,看起来SQL是通过"toSqlString()"或类似方法在每个提供者的基础上生成的.所以可能有一些地方需要注意......
编辑:它只是Ignore属性来完成这项工作.从来源:
/// IgnoreAttribute
/// Use to indicate that a property is not a field in the table
/// properties with this attribute are ignored when building sql sentences
Run Code Online (Sandbox Code Playgroud)
还可以选择使用我没有探索过的ALIAS.
我建议您使用表中的相关列(不包括计算列)创建一个视图,然后从该视图中进行工作。这样您就可以避免引用不需要的计算列。在插入、删除、更新和大多数其他方面,简单视图可以像普通表一样对待。
| 归档时间: |
|
| 查看次数: |
2562 次 |
| 最近记录: |