¿Cómo inserto entidades con Linq To SQL donde deseo especificar sus identidades, por ejemplo, rellenar previamente las tablas en la creación de la base de datos?

StackOverflow https://stackoverflow.com/questions/416581

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy comprometido en escribir un producto usando LinqToSql para el acceso a datos. Mientras nos desarrollamos rápidamente, el modelo cambia a menudo. Esto significa que volcamos y recargamos los lotes de la base de datos durante el desarrollo. Por lo tanto, se requiere una sobrecarga para recrear los datos de línea base cada vez.

Un proceso que restaura una copia de seguridad de la base de datos no es útil, ya que necesitaríamos actualizar la base de datos del modelo con la misma frecuencia; La misma sobrecarga (creo que, de todos modos).

Por lo tanto, quiero usar DataContext.CreateDatabase, luego extraer algunos datos de los archivos CSV. Multa. Pero también me gustaría unir las relaciones, lo que significa que, idealmente, saber cuáles serán las claves principales por adelantado (de lo contrario, dado que algunas identidades son GUIDs, será difícil unir los enlaces que necesito). / p>

¿Cuál es el equivalente a SET IDENTITY_INSERT IdentityTable ON (y OFF) en Linq To SQL? ¿Hay uno?

¿Fue útil?

Solución

No es necesario que conozca las claves principales de antemano, solo necesita conocer las relaciones.

Supongamos que desea cargar clientes y pedidos, donde un cliente tiene muchos pedidos.

Primero cargue en sus Clientes desde el archivo a la memoria, use un valor de clave principal falso del archivo para CustomerId (este valor será reemplazado por uno generado por la base de datos más adelante).

Dictionary<int, Customer> customers = LoadCustomersFromFile();

Segundo, cargue sus pedidos del archivo en la memoria. use un valor de clave primaria falso para OrderId. Reutilice esos clientes falsos para establecer relaciones. Agregue los pedidos a sus clientes relacionados.

Dictionary<int, Order> orders = LoadOrdersFromFile();
foreach(Order o in orders.Values)
{
  customers[o.CustomerId].Orders.Add(o);
}

Una vez que se haya construido el gráfico de objetos, InsertOnSubmitir todos los objetos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top