Il modo migliore per aggiornare le classi LINQ to SQL dopo la modifica dello schema del database

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

  •  09-06-2019
  •  | 
  •  

Domanda

Sto utilizzando le classi LINQ to SQL in un progetto in cui la progettazione del database è ancora un po' in evoluzione.

Esiste un modo semplice per sincronizzare le classi con lo schema o devo aggiornare manualmente le classi se la progettazione di una tabella cambia?

È stato utile?

Soluzione

È possibile utilizzare SQLMetal.exe per generare il file dbml e/o cs/vb.Utilizza uno script precompilato per avviarlo e indirizzarlo alla directory a cui appartiene il tuo progetto datacontext.

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sqlmetal.exe 
  /server:<SERVER> 
  /database:<database> 
  /code:"path\Solution\DataContextProject\dbContext.cs" 
  /language:csharp 
  /namespace:<your namespace>

Altri suggerimenti

Non l'ho provato personalmente, ma Strumenti Huagati DBML/EDMX è consigliato da altre persone.

Strumenti Huagati DBML/EDMX è un componente aggiuntivo per Visual Studio che aggiunge funzionalità al Designer del diagramma Linq2SQL/DBML in Visual Studio 2008 e al Designer di Entity Ado.Net in Visual Studio 2008 SP1.Il componente aggiuntivo aggiunge nuove opzioni di menu per l'aggiornamento dei diagrammi di design LinQ2SQL con le modifiche al database, per la rinascita di classi LINQ-a-SQL (DBML) ed EF (EDMX) e proprietà per utilizzare le convenzioni di denominazione .NET e per l'aggiunta di documentazione/descrizione a LINQ -To-SQL Classi generate dalle proprietà del database.

Screenshot of DBML Tools

Ecco una soluzione semplice senza software aggiuntivo, che funziona solo per modifiche semplici (come campi aggiunti, poche tabelle, ecc.).

Istruzioni:

  • Inserisci una copia della tabella modificata nel designer (verrà rimossa in seguito)
  • Ora seleziona tutti i campi nuovi (o modificati) e (right-click ->) copy
  • Nella tabella originale fai clic con il pulsante destro del mouse e insert loro (elimina prima i campi modificati)
  • Ora elimina la tabella da cui li hai copiati

So che è abbastanza ovvio, ma in qualche modo non intuitivo, e mi ha aiutato molto, poiché tutti gli attributi e i tipi corretti verranno copiati e tutti i collegamenti rimarranno intatti.Spero che sia d'aiuto.

Quando usare:

Ovviamente è - come detto - per piccole modifiche, ma sicuramente meglio che sostituire manualmente tabelle con molti collegamenti, o quando non si vuole che l'intera struttura del database venga generata da SQLMetal.Ad esempio quando hai una grande quantità di tabelle (es.SAP) o quando si utilizzano tabelle con collegamenti incrociati provenienti da database diversi.

DamienG ne ha scritti alcuni modelli t4 che può sostituire parte di ciò che VS genera per te.Questi possono essere eseguiti nuovamente quando vuoi tramite uno strumento da riga di comando.

I modelli T4 hanno l'ulteriore vantaggio di essere modificabili.Ciò ti consente di modificare ciò che viene generato in base al contenuto del tuo cuore.

Penso che Jeff se ne sia lamentato di recente.Una tecnica comune è trascinare nuovamente tutti gli oggetti nel designer...

Spero che qualcun altro intervenga con un approccio migliore!

Ho scritto uno strumento per apportare modifiche agli script Dbml vedere http://code.google.com/p/linqtodbmlrunner/ e il mio blog http://www.adverseconditionals.com

Che ne dici di modificare le proprietà dell'entità/tabella all'interno dell'area di progettazione DataContext in Visual Studio?

Ad esempio, se aggiungessi una colonna a una tabella SQL Server:

  1. Apri il file *.dbml.
  2. Fai clic con il pulsante destro del mouse sull'entità e seleziona Aggiungi > Proprietà.
  3. Compila i valori nella finestra Proprietà per la nuova colonna.
  4. Costruisci la tua soluzione.

Le classi del modello generate automaticamente dovrebbero riflettere la nuova colonna aggiunta.

enter image description here

enter image description here

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top