Xamarin.Forms项目,使用SQLiteNetExtensions 2.0.0和sqlite-net-pcl 1.5.231
我正在尝试将新记录插入sqlite数据库。当我在子表上删除NOT NULL和Foreign Key约束时,我的方案有效。当我重新添加约束时,出现以下异常:
SQLite.SQLiteException:'约束'
[Table("RetailItem")]
public class RetailItemDTO
{
[PrimaryKey, AutoIncrement]
public int RetailItemId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool Taxable { get; set; }
public int DepartmentId { get; set; }
public int RetailTypeId { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<RetailItemRetailerPriceDTO> Prices { get; set; }
}
[Table("RetailItemRetailerPrice")]
public class RetailItemRetailerPriceDTO
{
[PrimaryKey, AutoIncrement]
public int RetailItemRetailerPriceId { get; set; }
[ForeignKey(typeof(RetailItemDTO)), NotNull]
public int RetailItemId { get; set; }
public int RetailerId { get; set; }
public decimal Price { get; set; }
}
public async Task Save(RetailItem entity)
{
var dto = GetDTOFromBusinessModel(entity);
if (dto.RetailItemId == 0)
{
await _sqliteRepository.Database.InsertWithChildrenAsync(dto, true);
entity.Id = dto.RetailItemId;
}
else
await _sqliteRepository.Database.InsertOrReplaceWithChildrenAsync(dto, true);
}
如果我已有一个具有新价格的RetailItem,则InsertOrReplaceWithChildrenAsync调用没有问题将失败,并显示以下内容:SQLite.NotNullConstraintViolationException:'没有NULL约束失败:RetailItemRetailerPrice.RetailItemId'>
每当我添加一个带有新RetailItemRetailerPrice的新RetailItem时,就会发生约束异常。
如果我在RetailItemRetailerPrice表上删除了RetailItemId的NOT NULL和外键约束,那么这两个调用都会起作用。
我想在桌子上保留适当的约束。
我缺少一些可以使我的方案正常工作的属性吗?
答案 0 :(得分:0)
您已将RetailItemId
设置为非空,在RetailItemRetailerPrice
表中添加新商品时,必须为新价格设置RetailItemId
。
[ForeignKey(typeof(RetailItemDTO)), NotNull]
public int RetailItemId { get; set; }
如果您不想在表上保留约束。在RetailItemRetailerPrice
表中添加新项之前,可以查询RetailItem
表,获取RetailItemId
,最后,可以在RetailItemRetailerPrice
表中添加此新项