11

Ich verwende EF5 mit einem Datenbank-First-Modell. Und ein Datenbankprojekt in Visual Visual Studio, um das Sql Server-Datenbankschema einer Anwendung zu verwalten.Entity Framework-Modell aus Visual Studio-Datenbankprojekt generieren

das EF-Modell zu aktualisieren, ich bin die Änderungen in einer leeren Datenbank bereitstellen ...

Ist es möglich, ein EF-Modell aus einem Visual Studio (2012) Datenbank-Projekt zu generieren und aktualisieren?

UPDATE: Auch erzeugen sie aus einer dacpac-Datei ist eine nicht allzu schlechte Option. Ist es möglich?

UPDATE: In dem MS Build-Konferenz 2014 schlug das ADO.NET-Team, dass die zukünftigen Versionen von EF, wie EF7, nur mit dem Kodex First-Ansatz arbeiten.

Später klären sie den Namen des neuen Ansatzes sollte nicht Code First sein, trotz Code-Basis-Modellierung. Vielleicht ist nicht genau das gleiche aber as far as I read darüber scheint quite similar to me.

Also werde ich @ adam0101 Lösung versuchen. Jede andere vorgeschlagene Lösung, die mit CodeFisrt endet, migriert vom SSDT-Projekt zum EF-CodeFisrt-Projekt, und was ich will, ist eine reibungslose Koexistenz beider (vielleicht bin ich ein Träumer ...).

+0

Welche Version von Entity Framework? –

+1

Ich glaube, die EF Power Tools haben Reverse Engineering eine Datenbank als Feature: http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d – millimoose

+0

@millimoose: EF Power Tools adressieren Datenbankprojekte nicht. –

Antwort

1

Ich habe das Projekt SqlSharpener erstellt, das in der Lage sein soll zu tun, was Sie fragen.

Zum Beispiel gegeben, diese Tabellen in einem SSDT Projekt definiert:

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 
) 

Sie können eine T4-Vorlage erstellen, die die Einheiten als solche generieren:

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; } 
    } 
} 

Es gibt ein working example diese T4-Vorlage in simple example solution. Wenn es einen Anwendungsfall gibt, den SqlSharpener derzeit nicht behandelt, fühlen Sie sich frei add an issue und ich werde sehen, ob ich es hinzufügen kann.

Verwandte Themen