gpt4 book ai didi

sqlite - ServiceStack SqLite创建计算字段

转载 作者:行者123 更新时间:2023-12-03 18:45:43 25 4
gpt4 key购买 nike

我正在尝试使用inMemory数据库(使用ServiceStack.OrmLite.Sqlite.Windows)在基于Servicestack的Web API中进行单元测试。
我使用现有的Model类创建了一个表以插入到内存数据库中.model类,表创建和插入代码如下

            [Alias("Market")]
public class Market
{
[AutoIncrement]
[Alias("ID")]
public int Id { get; set; }
[Required]
public int Available { get; set; }
[Required]
public int AvailableSalesEvent { get; set; }
[Compute]
[Required]
public int AvailableTotal { get; set; }
[Required]
public int? MinCustomerBuy { get; set; }
}


db.DropAndCreateTable<Market>();
var market = new Market()
{
Available = 10,
AvailableTotal = 0,
AvailableSalesEvent = 2,
MinCustomerBuy = 10
};
db.Insert(market);


在使用以下表达式创建Market表时,我们正在计算SqlServer中的AvailableTotal字段值,

        [AvailableTotal]  AS (isnull([Available]+[AvailableSalesEvent],(0)))


当我尝试通过单元测试将上述市场对象插入InMemory数据库时,我遇到了异常

OneTimeSetUp:System.Data.SQLite.SQLiteException:约束失败
NOT NULL约束失败:Market.AvailableTotal

我发现异常是市场类的[Compute]属性的结果,并提出了将其替换为[Compute,ServiceStack.DataAnnotations.Ignore]的建议,当我进行更改时,InMemory数据库测试工作正常,但是通过实时数据库,即使在数据库中计算了AvailableTotal值并在数据库中更新了它,也将忽略它,并在返回响应时分配值0。

在InMemory数据库中创建表时,有什么方法可以定义此AvailableTotal字段表达式,并保留[Compute]属性,以克服此异常?

最佳答案

您可以使用以下方法暂时禁用计算的行为:

var fieldDef = typeof(Market).GetModelMetadata()
.GetFieldDefinition<Market>(x => x.AvailableTotal);

fieldDef.IsComputed = false;

db.Insert(market);

fieldDef.IsComputed = true;

关于sqlite - ServiceStack SqLite创建计算字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37591004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com