SQLite / SQLServer提供程序差异

时间:2019-07-10 15:58:33

标签: sqlite entity-framework-core ef-core-2.2

使用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);
}

0 个答案:

没有答案