У меня есть соединение LINQ-to-Entities с базой данных - как мне вставить данные в эту базу данных? - PullRequest
2 голосов
/ 07 февраля 2011

Я хотел бы вставить данные в базу данных размером 1 ГБ.В настоящее время я запрашиваю базу данных с помощью LINQ-to-Entities.

Проблема в том, что база данных велика - мне не нужно извлекать всю базу данных в память только для вставки.

Каков ваш рекомендуемый способ вставки данных в определенную таблицу, достаточно эффективно?

Обновление:

Я должен уточнить, что я вставляю данные втаблица, которая связана с двумя другими таблицами с отношением один ко многим.Есть ли способ, позволяющий платформе ADO обрабатывать обновление отношений первичного / внешнего ключа?

Обновление:

Найден правильный ответ, см. Какиспользовать LINQ-to-Entities для вставки данных в определенную таблицу?

Ответы [ 4 ]

2 голосов
/ 07 февраля 2011

Вы можете использовать процедуры хранения из-за объема данных. Или вы можете создать файл с данными, прочитать его строку на строку и вставить строку на строку с Linq, чтобы данные не загружались в память одновременно

Почему вы должны использовать хранимые процедуры? Давайте посмотрим на основные преимущества этой технологии: Прекомпилированное выполнение. SQL Server компилирует каждую хранимую процедуру один раз, а затем повторно использует план выполнения. Это приводит к огромному повышению производительности при многократном вызове хранимых процедур. Снижение трафика клиент / сервер. Если пропускная способность сети является проблемой в вашей среде, вы будете рады узнать, что хранимые процедуры могут сократить длинные запросы SQL до одной строки, которая передается по проводам. Эффективное повторное использование кода и программной абстракции. Хранимые процедуры могут использоваться несколькими пользователями и клиентскими программами. Если вы используете их запланированным образом, вы обнаружите, что цикл разработки занимает меньше времени. Усиленный контроль безопасности. Вы можете предоставить пользователям разрешение на выполнение хранимой процедуры независимо от базовых разрешений таблицы. В MSSQL язык является Transact-SQL (T-SQL).

1 голос
/ 07 февраля 2011

Вам не нужно ничего запрашивать, чтобы сделать вставку. При использовании структуры сущностей для вставки LINQ не играет роли. Используйте метод Create ... factory объекта, который вы хотите создать. Затем добавьте его в контекст сущности и вызовите метод SaveChanges ().

Например (vb.net), если вы работаете с таблицей / сущностью с именем Orders и контекстом сущности с именем OrderEntities:

Using context As New OrderEntities
    Dim order As Order = Order.CreateOrder(OrderNumber, Description, etc)
    context.AddToOrders(order)
    context.SaveChanges()
End Using

Это будет преобразовано в оператор INSERT для базы данных.

Это очень упрощенный пример. Вам может понадобиться добавить ассоциации, выполнить проверку и т. Д. Однако это показывает, что вы можете вставить с использованием инфраструктуры объектов, не выполняя сначала запрос LINQ to Entities.

EDIT:

Эта таблица на одной стороне или на многих сторонах этих отношений? Если это с одной стороны (таблица первичного ключа), вам не нужно ничего делать, потому что ссылка на внешний ключ находится в другой таблице. Если это сторона многих (таблица внешнего ключа), то перед вызовом метода AddTo () вам необходимо установить связь внешнего ключа.

Если внешний ключ является сущностью, загруженной в контекст сущности, вы можете установить его напрямую: order.Customer = customer

Однако, если он не загружен из базы данных, вы можете установить EntityKey: order.CustomerReference.EntityKey = New EntityKey("OrderEntities.Customer", "CustomerID", 5)

0 голосов
/ 08 февраля 2011
0 голосов
/ 07 февраля 2011

Да.

using(Entities context = new Entities() {
{
 Entity1 e1 = new Entity1{Id=-1, Name="E1"});
 Entity2 e2 = new Entity2{Id=-1, Name="E2", Entity1=e1});
 context.Entities2.AddObject(e2);
 context.SaveChanges();
}

Я не уверен, нужно ли добавлять e1 в коллекцию Entities1.

Чтобы это работало, вы должны определить в своих таблицах деИдентификатор как столбцы идентификаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...