Отличия провайдера Sqlite / SQLServer - PullRequest
0 голосов
/ 10 июля 2019

У меня проблемы с использованием провайдера sqlite для написания интеграционных тестов.

Если я присоединяю дерево сущностей к моему DbContext, у меня нарушаются отношения (работает то же самое с провайдером SqlServer).

См. Пример для получения дополнительной информации.

Для точности, PK трех таблиц - Id + TenantId.TenantId устанавливается только в методе SaveChangesAsync, в зависимости от подключенного пользователя.

Если я хочу, чтобы он работал на sqlite, я должен установить TenantId для 3 объектов, прежде чем присоединять их к контексту ... Почемуэто отличается от поставщика 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);
}

...