Я пытаюсь использовать базу данных inMemory (используя ServiceStack.OrmLite.Sqlite.Windows) для модульного тестирования в веб-api на основе servicestack. я создал таблицу для вставки в базу данных InMemory с использованием кодов существующей модели class.The класса модели, создание таблицы и вставки являютсяServiceStack SqLite Создание поля вычисления
[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);
мы вычисляя значение AvailableTotal поля в нашем SqlServer при создании таблицы рынка используя выражение следующим образом,
[AvailableTotal] AS (isnull([Available]+[AvailableSalesEvent],(0)))
при попытке вставить выше объект рынка к базе данных InMemory через модульное тестирование, я получал следующее исключение
OneTimeSetUp: System.Data.SQLite.SQLiteException: ограничение не удалось NOT NULL ограничения не удалось: Market.AvailableTotal
я узнал исключением является результатом [Compute] атрибута рынка класса, и получил предложения заменить его [Compute, ServiceStack .DataAnnotations.Ignore], когда я сделал изменения. Тесты базы данных InMemory работают нормально, но когда я протестировал его через живую базу данных, хотя значение AvailableTotal вычисляется и обновляется в БД, оно игнорируется, а при возврате ответа присваивается значение 0.
Есть ли способ определить это выражение AvailableTotal Field, создавая таблицу в базе данных InMemory, сохраняя атрибут [Compute], поскольку он должен превышать это исключение?
Спасибо за ответ он работал для меня. как установить fieldDef.ComputeExpression в servicestack.Ormlite. он запрашивает строковый ввод. – kgangadhar
@ G.Karthik вам не нужно устанавливать ComputeExpression, просто отключите IsComputed, чтобы отключить поведение. – mythz