使用sqlite provider编写集成测试时遇到一些麻烦。
如果我将实体树附加到DbContext上,则会破坏关系(与SqlServer提供程序相同的功能)。
有关更多信息,请参见示例。
为了精确起见,这3个表的PK为Id + TenantId。 TenantId仅在SaveChangesAsync方法中设置,具体取决于所连接的用户。
如果我想让它在sqlite上运行,我必须在3个对象上设置TenantId,然后再将它们附加到上下文中。为什么这与SQL Server提供程序不同?
public class Store {
public int Id { get; set; }
public int TenantId { get; set; }
public List<Product> Products { get; set; }
}
public class Product {
public int Id { get; set; }
public int TenantId { get; set; }
public Store Store { get; set; }
public int StoreId { get; set; }
public Category Category { get; set; }
public int CategoryId { get; set; }
}
public class Category {
public int Id { get; set; }
public int TenantId { get; set; }
public List<Product> Products { get; set; }
}
[Test]
public void Test_Create(){
var store = new Store();
store.Products = new List<Product>();
var product = new Product();
product.Category = new Category();
store.Products.Add(product);
dbContext.Stores.Add(store);
// fails, product is detached from the Store after attaching to DbContext
Assert.Single(store.Products);
}