Ale*_*lex 12 c# entity-framework visual-studio ef-database-first visual-studio-2012
我正在使用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
)
Run Code Online (Sandbox Code Playgroud)
您可以创建一个 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; }
}
}
Run Code Online (Sandbox Code Playgroud)
简单示例解决方案中有此 T4 模板的工作示例。如果有 SqlSharpener 当前无法处理的用例,请随时添加问题,我会看看是否可以添加它。