![](/img/trans.png)
[英]How to retrieve Ids of a collection of objects after savechanges from database using Entity Framework code first
[英]How to sync model after using Code First from Database using Entity Framework 6.1 and MVC 5?
使用 EF 6.1、MVC 5、VS 2013、C#
我有一个在 Toad DM for SQL Server 中设计的现有数据库模型,保持它始终更新非常重要
使用 ADO.NET 实体数据模型,我选择了Code First from Database ( EF 6.1 中的新功能)来生成模型。 注意:模型类和 DbContext 类生成成功,但没有生成.edmx 或 .tt 文件。
接下来我添加了一个新的脚手架项目:MVC 5 Controllers with views,使用实体框架。 注意:成功,生成控制器和视图
从现在开始,我不想使用 Code First 来更新我的数据库。 相反,我希望根据数据库更改更新模型。 接下来做什么? 如果我没有 edmx 文件,我将无法从数据库更新我的模型类吗?
实体数据模型向导的 Code First from Database 在创建实体类方面做得非常出色,就好像它们是在 Code First 样式中创建的一样。 您要问的是是否有任何方法可以在您的数据库更改时使这些类保持最新,类似于 EDMX 样式“从数据库更新模型”。 从我研究这个使用内置的工具是不可能的。 但是,这是我发现有用的一种解决方法:
假设我有一个带有产品表和客户表的数据库。 最初我创建了一个 StoreDBContext 类,并选择产品作为我的对象之一。 现在我想将客户表作为新实体添加到现有上下文中。 以下是使用 Code First 向导执行此操作的方法:
StoreDBContextTemp.cs
,并复制新添加实体的虚拟属性: public virtual DbSet<Customer> Customers {get; set;}
StoreDBContext.cs
dbcontext 类中。如果您添加或删除表,您将需要手动调整字段,但至少每次向模型添加新表时,您都不需要手写数十个属性。
三件事。
使用 Code First 时没有 .edmx。
如果您使用 Code First 迁移,则必须首先编写代码,然后将更改迁移到数据库。 这有助于您在没有生成代码的情况下更有条理地编写代码,这是一个优势。
Visual Studio 中有一个插件可以做相反的事情。 Entity Framework PowerTools 允许您选择数据库并将其映射到对象。
https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d
还有一件事要添加到Brian Vander Plaats的回答中。 在步骤4中,您还需要复制新StoreDBContextTemp.cs / OnModelCreating方法中的任何内容,并将其添加到现有的StoreDBContext.cs / OnModelCreating中。 否则,在删除新的上下文类时,您将丢失这些配置。
对我来说最好的解决方案是删除模型并重新创建具有相同名称的更新模型,请记住两点:
我个人的解决方案:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.