从Visual Studio数据库项目生成entity framework模型

我正在使用EF5和Database-First模型。 和Visual Visual Studio中的数据库项目一起维护应用程序的Sql Server数据库模式。

要更新EF模型,我将在空数据库中部署更改…

是否可以从Visual Studio(2012)数据库项目生成和更新EF模型?

更新:dacpac文件生成它也是一个不错的选择。 可能吗?

更新:在MS Build 2014大会上,ADO.NET团队建议EF的未来版本(如EF7)仅适用于Code First方法。

后来,他们澄清了新方法的名称,不应该是Code First,尽管代码库建模。 也许并不完全相同,但据我所知,它似乎与我非常相似 。

所以我要尝试@ adam0101解决方案。 以CodeFisrt结尾的任何其他提出的解决方案都追求从SSDT项目迁移到EF的CodeFisrt项目,我想要的是两者的平滑共存(也许我是一个梦想家……)。

我创建了项目SqlSharpener ,它应该能够做你想要的。

例如,给定SSDT项目中定义的这些表:

 CREATE TABLE [dbo].[Tasks] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Name] VARCHAR(50) NOT NULL, [Description] VARCHAR(1000) NOT NULL, [TaskStatusId] INT NOT NULL, [Created] DATETIME NOT NULL , [CreatedBy] VARCHAR(50) NOT NULL, [Updated] DATETIME NOT NULL, [UpdatedBy] VARCHAR(50) NOT NULL, CONSTRAINT [FK_Tasks_ToTaskStatus] FOREIGN KEY ([TaskStatusId]) REFERENCES [TaskStatus]([Id]) ) CREATE TABLE [dbo].[TaskStatus] ( [Id] INT NOT NULL PRIMARY KEY, [Name] VARCHAR(50) NOT NULL ) 

您可以创建一个T4模板,它将生成这样的实体:

 using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity; namespace SimpleExample.EntityFrameworkCodeFirst { public partial class TaskContext : DbContext { public TaskContext(): base() { } public DbSet Tasks { get; set; } public DbSet TaskStatus { get; set; } } [Table("Tasks")] public partial class Tasks { [Key] [Required] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Int32? Id { get; set; } [Required] [MaxLength(50)] public String Name { get; set; } [Required] [MaxLength(1000)] public String Description { get; set; } [Required] public Int32? TaskStatusId { get; set; } [ForeignKey("Id")] public virtual TaskStatus TaskStatus { get; set; } [Required] public DateTime? Created { get; set; } [Required] [MaxLength(50)] public String CreatedBy { get; set; } [Required] public DateTime? Updated { get; set; } [Required] [MaxLength(50)] public String UpdatedBy { get; set; } } [Table("TaskStatus")] public partial class TaskStatus { [Key] [Required] public Int32? Id { get; set; } public virtual ICollection Tasks { get; set; } [Required] [MaxLength(50)] public String Name { get; set; } } } 

在简单的示例解决方案中有一个这个T4模板的工作示例 。 如果有一个SqlSharpener当前没有处理的用例,可以随意添加一个问题 ,我会看看是否可以添加它。