Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在生成DbContext之后,如何修改数据库?_C#_Asp.net Mvc_Entity Framework_Ef Code First_Dbcontext - Fatal编程技术网

C# 在生成DbContext之后,如何修改数据库?

C# 在生成DbContext之后,如何修改数据库?,c#,asp.net-mvc,entity-framework,ef-code-first,dbcontext,C#,Asp.net Mvc,Entity Framework,Ef Code First,Dbcontext,现在,我已经通过以下方式从现有数据库生成了19个代码优先类: 首先创建一个模型实体,然后选择“从数据库生成” 右键单击并选择“添加代码生成项” EF 4.x DbContext生成器 我想要的所有类都已生成,我对它们非常满意 现在回答我的问题 为什么所有生成的.cs文件都嵌套在密封的.tt集合中 为什么我不能将它们复制粘贴到我喜欢的任何文件夹中,并像对待普通类一样对待它们 是因为我,还是因为这样做而无法使用迁移“更新数据库” 我想我的总体问题是,为什么它们位于.tt文件夹中? 现在我该如

现在,我已经通过以下方式从现有数据库生成了19个代码优先类:

  • 首先创建一个模型实体,然后选择“从数据库生成”
  • 右键单击并选择“添加代码生成项”
  • EF 4.x DbContext生成器
我想要的所有类都已生成,我对它们非常满意

现在回答我的问题

  • 为什么所有生成的.cs文件都嵌套在密封的.tt集合中
  • 为什么我不能将它们复制粘贴到我喜欢的任何文件夹中,并像对待普通类一样对待它们
  • 是因为我,还是因为这样做而无法使用迁移“更新数据库”
我想我的总体问题是,为什么它们位于.tt文件夹中? 现在我该如何更新我的数据库?通过手动编辑数据库,然后更新模型,然后再次生成dbContext?还是有一个从.tt文件夹中取出.cs文件的技巧

在生成DbContext之后,如何修改数据库

  • 为什么所有生成的.cs文件都嵌套在密封的.tt集合中
您的代码优先类不是代码优先类。它们是根据您的数据库架构生成的。因此,这是一种数据库优先的方法。使用database first,将基于数据库生成实体类。换句话说,数据库是第一位的,代码是第二位的。tt文件是一个T4模板,它决定如何基于数据库生成类。您可以更改数据库,然后重新生成实体类

  • 为什么我不能将它们复制粘贴到我喜欢的任何文件夹中,并像对待普通类一样对待它们
因为它们是基于T4模板生成的文件

  • 是因为我,还是因为这样做而无法使用迁移“更新数据库”
你问题的这一部分我不能肯定地回答,只能推迟。然而,在我看来,你似乎想混合和匹配的方法。听起来您希望首先基于数据库生成代码类,然后根据添加到模型项目中的新实体类更改数据库。是这样吗


您可以放弃代码生成部分,只使用纯代码优先的方法,现在您已经知道实体POCO应该是什么样子了。我以前尝试过T4代码生成(EF 4.1之前),但立即放弃了它,因为正如您所看到的,由于生成了entity和DbContext类,您将失去对面向对象模型的控制

我使用DB-first和Model-first的组合,并根据需要对它们进行更改。由于您已经在使用T4模板,如果您对数据库进行更改,然后“从数据库更新模型”,这些更改将(应该)反映在您的模型中,从而反映在T4生成的类中。根据我的需要,我有时会直接更改数据库(从而保留所有数据),或者更新模型,然后让它生成所有DLL-但是使用这种方法,在删除表时会丢失所有数据谢谢你们。但是是的,我可以采用纯代码优先的方法,现在我已经知道实体POCO应该是什么样子了。我不认为生成DbContext和所有类有什么意义,如果不能在Werds之后首先将其作为代码使用,那么为什么要生成它们(只需首先使用常规模型)?