11

我正在使用EF5和Database-First模型。并在Visual Studio中使用数据库项目来维护应用程序的Sql Server数据库模式。从Visual Studio数据库项目生成实体框架模型

要更新EF模型,我在一个空数据库部署的变化...

是否有可能生成和更新从一个Visual Studio(2012)数据库项目中的EF模式?

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

UPDATE: 在MS建设2014大会上,ADO.NET团队建议,从EF未来的版本中,像EF7,只会用代码优先的方法工作。

后来,他们澄清了新方法的名称应该不是Code First,尽管Code base建模。也许是不完全一样,但似乎quite similar to meas far as I read

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

+0

什么版本的Entity Framework? –

+1

我相信EF Power Tools已经将数据库逆向工程化为一项功能:http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d – millimoose

+0

@millimoose:EF Power Tools不涉及数据库项目。 –

回答

1

我创建了项目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> Tasks { get; set; } 
     public DbSet<TaskStatus> 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> Tasks { get; set; } 

     [Required] 
     [MaxLength(50)] 
     public String Name { get; set; } 
    } 
} 

有这样一个working example T4模板中的simple example solution。如果有一个SqlSharpener目前没有处理的用例,请随时登录add an issue,我会看看我是否可以添加它。

相关问题