Создание модели Entity Framework из проекта базы данных Visual Studio

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

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

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

UPDATE: Также генерировать его из файла dacpac является не слишком плохим вариантом. Возможно ли это?

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

Позже они уточняют, что название нового подхода не должно быть Code First, несмотря на моделирование кода. Возможно, это не совсем то же самое, но насколько я читаю об этом кажется довольно похоже на меня.

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

Ответ 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; }
    }
}

Существует рабочий рабочий пример этого шаблона T4 в простой пример решение. Если есть прецедент, который SqlSharpener в настоящее время не обрабатывает, не стесняйтесь добавить проблему, и я увижу, могу ли я добавить его в.