我有 ApiKey 实体
public class ApiKey : BaseEntity {
[StringLength(255)]
[Column("ApiKey")]
public string ApiKeyValue { get; set; } = string.Empty;
public ICollection<LoyaltyProgram> LoyaltyPrograms { get; set; } = new HashSet<LoyaltyProgram>();
}
我还有 LoyaltyProgram 实体:
public class LoyaltyProgram : BaseEntity
{
[StringLength(50)]
public string Name { get; set; } = string.Empty;
public ICollection<ApiKey> ApiKeys { get; set; } = new HashSet<ApiKey>();
}
我想创建多对多关系。根据官方文档,我不需要再添加任何配置: https://learn.microsoft.com/en-us/ef/core/modeling/relationships/many-to-many#basic-many-to-many
当我开始我的 xUnit 测试时,我收到此错误消息:
System.InvalidOperationException : 实体类型的种子实体 无法添加具有键值“Id:1”的“ApiKey”,因为它具有 导航“忠诚度计划”集。要播种关系,请添加 实体种子到“ApiKeyLoyaltyProgram(Dictionary
)”和 指定外键值 {'ApiKeysId'}。
这就是我的 xUnit 测试的样子:
[Fact]
public async Task GivenPostMeasurementCommand_WhenDeviceIsSendingMeasurementData_ThenResponseIsReturned()
{
var context = CreateContext();
var loyaltyProgram_1 = CreateLoyaltyProgram();
var customer_1 = CreateCustomer();
customer_1.FirstName = "FirstName";
customer_1.LastName = "LastName";
var loyaltyProgramCustomer_1 = CreateLoyaltyProgramCustomer();
loyaltyProgramCustomer_1.LoyaltyProgram = loyaltyProgram_1;
loyaltyProgramCustomer_1.Customer = customer_1;
var product_1 = CreateProduct();
product_1.LoyaltyProgram = loyaltyProgram_1;
var productRule_1 = CreateProductRule();
...
var customerCard_1 = CreateCustomerCard();
...
var session_1 = CreateSession();
...
var apiKey_1 = CreateApiKey();
apiKey_1.ApiKeyValue = "api key";
apiKey_1.LoyaltyPrograms = new List<LoyaltyProgram>() { loyaltyProgram_1 };
loyaltyProgram_1.ApiKeys.Add(apiKey_1);
await context.Sessions.AddAsync(session_1);
await context.ProductRules.AddAsync(productRule_1);
await context.LoyaltyProgramCustomers.AddAsync(loyaltyProgramCustomer_1);
await context.ApiKeys.AddAsync(apiKey_1);
await context.SaveChangesAsync();
...
}
它在第一个 AddAsync 方法上中断,或者在这种情况下
await context.Sessions.AddAsync(session_1);
如何在多对多关系中正确播种数据?