加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 从Visual Studio数据库项目生成实体框架模型

发布时间:2020-12-15 03:42:31 所属栏目:百科 来源:网络整理
导读:我使用的是具有数据库优先模型的EF5.并在Visual Visual Studio中的一个数据库项目来维护应用程序的Sql Server数据库模式. 要更新EF模型,我将更改部署在空数据库中… 是否可以从Visual Studio(2012)数据库项目生成和更新EF模型? 更新: 也从dacpac文件生成它
我使用的是具有数据库优先模型的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
)

您可以创建一个将生成实体的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; }
    }
}

在simple example solution中有一个working example的T4模板.如果有一个用例,SqlSharpener目前不处理,请随时查看add an issue,我会看看是否可以添加它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读