Best way to update LINQ to SQL classes after datab

2019-01-07 03:01发布

问题:

I'm using LINQ to SQL classes in a project where the database design is still in a bit of flux.

Is there an easy way of synchronising the classes with the schema, or do I need to manually update the classes if a table design changes?

回答1:

You can use SQLMetal.exe to generate your dbml and or cs/vb file. Use a pre-build script to start it and target the directory where your datacontext project belongs.

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>


回答2:

I haven't tried it myself, but Huagati DBML/EDMX Tools is recommended by other people.

Huagati DBML/EDMX Tools is an add-in for Visual Studio that adds functionality to the Linq2SQL/DBML diagram designer in Visual Studio 2008, and to the ADO.NET Entity Framework designer in Visual Studio 2008 SP1. The add-in adds new menu options for updating Linq2SQL designer diagrams with database changes, for renaming Linq-to-SQL (DBML) and EF (EDMX) classes and properties to use .net naming conventions, and for adding documentation/descriptions to Linq-to-SQL generated classes from the database properties.



回答3:

Here is an easy fix without any additional software, that just works for simple changes (like added fields, few tables, etc).

Instructions:

  • You pull a copy of the changed table into the designer (will be removed later)
  • Now select all the new (or changed) fields and (right-click ->) copy
  • In your original table right click and insert them (delete changed fields first)
  • Now delete the table you copied them from

I know it is kinda obvious, but somehow non-intuitive, and it helped me a lot, since all the right attributes and types will be copied, and all links stay intact. Hope it helps.

When to use:

Of course it is - as said - for small changes, but surely better than manually replacing tables with many links, or when you don't want your whole database structure generated by SQLMetal. For example when you have a big amount of tables (e.g. SAP), or when using cross-linked tables from different databases.



回答4:

DamienG has written some t4 templates which can replace some of what VS generates for you. These can be rerun whenever you like via a command line tool.

T4 templates have the added benefit of being editable. This allows you to tweak what is generated to you hearts content.



回答5:

I think Jeff complained about this recently. One common technique is to drag all the objects into the designer again...

I hope someone else chimes in with a better approach!



回答6:

I wrote a tool to do script changes to Dbml scripts see http://code.google.com/p/linqtodbmlrunner/ and my blog http://www.adverseconditionals.com



回答7:

How about modifying the Properties of the entity/table within the DataContext design surface within Visual Studio?

For instance if I added a column to an SQL Server table:

  1. Open the *.dbml file.
  2. Right click the entity and select Add > Property.
  3. Fill out the values in the Properties window for the new column.
  4. Build your solution.

The auto generated model classes should reflect the new column that was added.