我正在使用linq-to-sql的DataContext
在Visual Studio 2010中工作,它有几个映射到数据库中的表。现在,当我将某些内容更改为数据库结构时,我注意到DataContext
不会更改并导致错误。 DataContext不再符合数据库的结构。我通常通过删除DataContext中的所有表映射来解决此问题,并从Visual Studio的数据库资源管理器中再次拖动它们。我只是觉得这很麻烦,而且必须有更好的方法来做到这一点?当我更改数据库结构时,是否有按钮或选项可以自动更新DataContext?如何根据数据库结构的变化更新DataContext?
回答
Linq2Sql模型在生成后会与数据源断开连接。只是在拖动&从数据源资源管理器中删除项目来建立连接并查询数据库模式。如果您的模式更改很小(即新的表格列),则可以很容易地手动添加这些内容。对于更剧烈的模式更改,您当前的方法可能是最快最简单的方法。
它是可能通过使用sqlmetal.exe命令行工具自动执行此代码生成过程。我在过去的项目中使用了不断变化的数据库模式,并且在每次构建之前调用sqlmetal,因此当它发生更改时,我们得到了有用的编译错误。如果您的模式没有发生太大的变化,您可以在项目中简单地创建一个批处理文件,以便在必要时更新Linq2Sql模型。
我会给'sqlmetal'一个尝试,我读过你的文章,并相信这是我所追求的。 – Bazzz 2012-02-28 10:38:07
让connectionstrin为: string pp = @“Data Source =(LocalDB)\ v11.0; AttachDbFilename = C:\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ AdventureWorks2012_Data.mdf;集成安全性=真;连接超时= 30“;
和更新任务中下面提到:中
public async Task callupdate()
{
try
{
int ppp = Convert.ToInt32(textBox1ID.Text);
DataClasses1DataContext dc = new DataClasses1DataContext(pp);
Person person = dc.Persons.Single(c => c.BusinessEntityID == ppp);
person.PersonType = Convert.ToString(PersonTypecomboBox1.SelectedItem);
person.PersonType = Convert.ToString(PersonTypecomboBox1.SelectedItem);
if (NameStylecomboBox1.SelectedText == "False")
person.NameStyle = false;
else
person.NameStyle = true;
person.Title = Convert.ToString(TitlecomboBox1.SelectedItem);
person.FirstName = FirstNametextBox2.Text;
person.MiddleName = MiddleNametextBox3.Text;
person.LastName = LastNametextBox4.Text;
person.Suffix = SuffixtextBox5.Text;
person.EmailPromotion = Convert.ToInt32(EmailPromotiontextBox6.Text);
person.ModifiedDate = DateTime.Today;
dc.SubmitChanges();
}
catch(Exception exp)
{
}
}
代替DataClasses1DataContext dc = new DataClasses1DataContext();
DataClasses1DataContext dc = new DataClasses1DataContext(pp);
VBY调用SubmitChanges()
这就是我们的类的对象实际上是被写在更新数据实际数据库
你似乎完全不了解这个问题。 – 2014-12-15 07:55:27
在EF Core
中,您可能会发现某些“脚手架”命令很有帮助。
脚手架可以再生您的DbContext
以及您的模型。而且根据我的经验,不会覆盖你所做的任何自定义partial classes
扩展DbContext
,所以那些继续工作。
您可能需要将它们添加到您的project.json(旧)/的csproj(新)安装某些工具
DOTNET CLI
dotnet ef dbcontext scaffold --help`
Usage: dotnet ef dbcontext scaffold [arguments] [options]
Arguments:
<CONNECTION> The connection string to the database.
<PROVIDER> The provider to use. (E.g. Microsoft.EntityFrameworkCore.SqlServer)
此命令(从项目的根目录下,假设您将模型保存在名为“Models”的文件夹中); 1)更新我的模型和2)我的DbContext。如果你只想更新你的DbContext,我使用源代码控制(git)来放弃对模型的更改;保持对DbContext的更改。
dotnet ef dbcontext scaffold "{connection}" Microsoft.EntityFrameworkCore.SqlServer \
-f --output-dir=Models
Powershell的
More info here,一个简短的命令:
SYNTAX
Scaffold-DbContext [-Connection] <String> [-Provider] <String> [-OutputDir <String>] [-Context <String>] [-Schemas <String[]>] [-Tables <String[]>] [-DataAnnotations] [-Force] [-Environment <String>] [-Project <String>] [-StartupProject <String>]
[<CommonParameters>]
PARAMETERS
-Connection <String>
The connection string to the database.
-Provider <String>
The provider to use. (E.g. Microsoft.EntityFrameworkCore.SqlServer)
-OutputDir <String>
The directory to put files in. Paths are relaive to the project directory.
-Context <String>
The name of the DbContext to generate.
....
-Force [<SwitchParameter>]
Overwrite existing files.
- 1. 当Rails关联发生变化时更新数据库结构
- 2. 属性根据日期时间变化的数据结构?
- 3. 优化数据库结构
- 4. 变化数据结构数据帧
- 5. YII如何更改数据库结构
- 6. 如何根据C#DataGridView的更改更新数据库?
- 7. 通过db:migrate更改结构数据库后,Rails如何执行数据更新?
- 8. 你如何更新整个MySQL数据库的结构?
- 9. 我如何备份数据库数据,以适应新的数据库结构?
- 10. 根据输入值更新数据库
- 11. 更新数据库架构
- 12. 如何根据构建更新设置?
- 13. 根据选择查询结果更新数据库记录
- 14. 如何根据数据库结果更改字体颜色
- 15. Redis - 处理数据结构的变化
- 16. 变化数据帧结构中的R
- 17. 从旧的数据库结构导出到新的数据库结构
- 18. 根据新的数据库更改更新模型
- 19. 如何更新数据库更新数据库
- 20. 产品变体的数据库结构
- 21. 如何根据日期自动更新数据库?
- 22. Django,如何根据foreignkey值更新数据库?
- 23. 如何更新数据库?
- 24. 如何更新数据库
- 25. 在Visual Studio中更新DataSet结构以匹配新的SQL数据库结构
- 26. 数据库结构
- 27. 数据库结构
- 28. 如何绘制数据库的结构
- 29. 非结构化数据库设计
- 30. 图形结构化数据库和Php
@Niklas以及这有点高兴听到另一个人也有类似的问题,但随后'实体Framework'。但接受的解决方案或多或少是我所做的。但是,当多个表格发生变化并且您不知道哪些表格时,这会有点麻烦。您将最终每次删除并添加它们。我认为一定有更好的办法? – Bazzz 2012-02-28 09:38:31
[如何将Linq更新到SQL dbml文件?](http://stackoverflow.com/questions/1110171/how-to-update-linq-to-sql-dbml-file) – MattDavey 2012-02-28 09:58:21
@MattDavey可能重复像复制品一样。我只是没有设法制定我的标题,以便在提出我的问题的同时,您的文章成为一个建议。随意投票结束。 – Bazzz 2012-02-28 10:37:23