11

Я использую EF5 с базой данных-первой. И проект базы данных в Visual Visual Studio для поддержки схемы базы данных Sql-сервера приложения.Создание модели Entity Framework из проекта базы данных Visual Studio

Для обновления модели EF, я развертываюсь изменения в пустой базе данных ...

Можно ли создавать и обновлять модель EF от Visual Studio (2012) проекта базы данных?

UPDATE: также генерируют его из dacpac файла не слишком плохой вариант. Является ли это возможным?

UPDATE: В MS Построить 2014 конференции, команда ADO.NET предположил, что будущие версии от EF, как EF7, будет работать только с Code First подход.

Позже они уточняют, что название нового подхода не должно быть кодом Сначала, несмотря на моделирование кода. Возможно, не совсем то же самое, но as far as I read примерно quite similar to me.

Так что я собираюсь попробовать решение @ adam0101. Любое другое предлагаемое решение, которое заканчивается CodeFisrt, преследует переход от проекта SSDT к проекту CodeFisrt EF, и я хочу, чтобы это было гладкое сосуществование обоих (возможно, я мечтатель ...).

+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, и я увижу, могу ли я его добавить.

Смежные вопросы