Я использую Ef6 Code First (Generic Repository Concepts)Общий способ реализации Ef6 Code First
Пример кода для создания записи:
Generic.cs:
public T Create<T>(T t) where T : class
{
T newEntry = this.dbContext.Set<T>().Add(t);
this.SaveChanges();
return newEntry;
}
Фактический код:
var customer = new Customer{
Name = "Adams",
Amount = 1000
};
CustomerId is AutoIdentity Column Он автоматически генерирует идентификатор.
столКлиент, имеющий один-ко-многим с Продуктами (CustomerID FK в таблице Products)
Теперь я добавляю новых КодКлиента в Список продуктов
var productsList = new List<Product>
{
new Product
{
ProdName = "crocin",
Date = DateTime.Parse("2003-09-01"),
Customer.CustomerId = newCustomerId //
},
new Product
{
ProdName = "crocin1",
Date = DateTime.Parse("2003-09-01"),
Customer.CustomerId = newCustomerId //
},
new Product
{
ProdName = "crocin2",
Date = DateTime.Parse("2003-09-01"),
Customer.CustomerId = newCustomerId //
}
};
Теперь я ударяя базы данных в два раза потому что сначала я получаю CustomerId, тогда я назначаю New CustomerId всем выбранным продуктам.
Вот код:
var newCustomer = Generic.Create<Customer>(customer);
Итерируя список продуктов, и я assinging в newCustomerId в продукты ..
foreach(var product in productList)
{
product.CustomerId = newCustomerId;
Generic.Create<Product>(product);
}
Можно ли изменить этот код, чтобы более универсальный способ внедрения такого рода.
Create(T parentTable, List<T> childTableList)
{
// First Inserting ParentTable
db.SaveChanges();
//Fetching ID
// Inserting Into ChildTables..
db.SaveChanges();
}
Просьба предложить мне расширить эту треску e ...
Спасибо haim770, чтобы ответить .. Мой код работает нормально .. но я хочу, чтобы все было в одном методе .. вроде this..Create (T parentTable, List childTableList) { // Вставка родительского стола db.SaveChanges(); // Извлечение ID // Вставка Into ChildTables. db.SaveChanges(); } возможно ли это? более общий способ реализации. – jsiklie
Рефакторинг репозитория так, как вы предлагаете, поражает неосновную цель репозитория, поскольку он специально связан с потребностями «Заказчика». Вам нужно лучше понять, какова роль Object-Relational-Mapper (ORM). Он позволяет работать с «объектами», а не с «таблицами», и (судя по проблеме, которую вы представляете) ваш «Клиент» должен определенно содержать ссылку на соответствующую коллекцию «Продукт». – haim770
Я постараюсь реализовать это ... – jsiklie