EFCore, как убрать ограничение на уникальность объекта в столбце таблицы
У меня есть три таблицы, я хочу их заполнить тестовыми данными. Сами таблицы:
public class Service : NamedEntity
{
public ListOfServices ListOfServices { get; set; }
[Column(TypeName = "decimal(18,2)")]
public decimal Price { get; set; }
}
public class Order : Entity
{
[Column(TypeName = "decimal(18,2)")]
public decimal Price { get; set; }
public DateTime OrderDate { get; set; }
public virtual Client Client { get; set; }
public virtual Employee Employee { get; set; }
public string ObjectOfWork { get; set; }
public virtual ListOfServices ListOfServices { get; set; }
public string Status { get; set; }
public string? Description { get; set; }
}
public class ListOfServices : Entity
{
public long ServiceId { get; set; }
public Service Services { get; set; }
public long OrderId { get; set; }
public Order Order { get; set; }
}
Код заполнения таблиц:
private const int __ServicesCount = 30;
private Service[] _Services;
private async Task InitializeServices()
{
var rnd = new Random();
_Services = Enumerable.Range(1, __ServicesCount)
.Select(i => new Service
{
Name = $"Название услуги {i + 1}",
Price = (decimal)rnd.NextDouble() * 2000 + 700
})
.ToArray();
await _db.Services.AddRangeAsync(_Services);
await _db.SaveChangesAsync();
}
private const int __OrdersCount = 5;
private Order[] _Orders;
private async Task InitializeOrders()
{
var rnd = new Random();
_Orders = Enumerable.Range(1, __OrdersCount)
.Select(i => new Order
{
OrderDate = DateTime.UtcNow,
Employee = rnd.NextItem(_Employees),
Client = rnd.NextItem(_Clients),
ObjectOfWork = $"ГБЦ {i}",
Price = (decimal)rnd.NextDouble() * 4000 + 700,
Status = "Неизвестно",
Description = ""
})
.ToArray();
await _db.Orders.AddRangeAsync(_Orders);
await _db.SaveChangesAsync();
}
private const int __ListOfServicesCount = 50;
private ListOfServices[] _ListOfServices;
private async Task InitializeListOfServices()
{
var rnd = new Random();
_ListOfServices = Enumerable.Range(1, __ListOfServicesCount)
.Select(i => new ListOfServices
{
Services = rnd.NextItem(_Services),
Order = rnd.NextItem(_Orders)
})
.ToArray();
await _db.ListOfServices.AddRangeAsync(_ListOfServices);
await _db.SaveChangesAsync();
}
Я ожидаю что таблица ListOfServices после инициализации данных будет иметь 50 строк, а генерируется максимум 5.
При попытки добавить строку вручную со значением, которое уже было в таблице вылезает ошибка:
Таблица ListOfServices является связующей. Благодаря ей я хочу получить список предоставленных услуг в заказе
Источник: Stack Overflow на русском