我使用的是具有数据库优先模型的EF5.并在Visual Visual Studio中的一个数据库项目来维护应用程序的sql Server数据库模式.
要更新EF模型,我将更改部署在空数据库中…
是否可以从Visual Studio(2012)数据库项目生成和更新EF模型?
更新:
也从dacpac文件生成它是不是太糟糕的选择.可能吗?
更新:
在MS Build 2014会议上,ADO.NET团队建议,EF的未来版本(如EF7)将仅适用于Code First方法.
后来他们澄清了新方法的名称不应该是Code First,尽管代码基础建模.也许不完全一样,但as far as I read似乎是quite similar to me.
所以我打算尝试@ 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 )
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; } } }
在simple example solution中有一个working example的T4模板.如果有一个用例,sqlSharpener目前不处理,请随时查看add an issue,我会看看是否可以添加它.
原文地址:https://www.jb51.cc/csharp/94000.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。