由code生成数据库model_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 由code生成数据库model

由code生成数据库model

 2015/2/6 13:05:40  Peter.Liu310  程序员俱乐部  我要评论(0)
  • 摘要:在做项目的时候,用到了entityframework,数据库是mysql。以前一直是先建好DBmodel,然后项目中添加。但是之后改动db,又需要update。像同事学习了:codemakedbmodel。需要的dll:MySql.data(6.9.5.0),MySql.data.Entity.EF6(6.9.5.0),System.Sata,System.Sata.DataSetExtension,System.Sata.SQLLite,System.Sata.SQLLite.EF6
  • 标签:数据库 数据

在做项目的时候,用到了entity framework,数据库是mysql。以前一直是先建好DB model,然后项目中添加。但是之后改动db,又需要update。像同事学习了:code make db model。

 需要的dll:MySql.data(6.9.5.0), MySql.data.Entity.EF6(6.9.5.0),

System.Sata, System.Sata.DataSetExtension, System.Sata.SQLLite,System.Sata.SQLLite.EF6,System.Sata.SQLLite.Linq, EntityFramework, EntityFramework.SqlServer

config文件的连接字符串:

 <connectionStrings>
        <add name="JobMasterDBConnection_MSSQL" connectionString="Data Source=EISCNG109WQS1;Initial Catalog=JobMaster;Integrated Security=True" providerName="System.Data.SqlClient" />
        <add name="JobMasterDBConnection_MYSQL" connectionString="Data Source=127.0.0.1; port=3306; Initial Catalog=JobMaster; uid=root; pwd=Password!01;" providerName="MySql.Data.MySqlClient" />
        <add name="JobMasterDBConnection_SQLite" connectionString="Data Source=DB\JobMaster.local.db;" providerName="System.Data.SQLite.EF6" />
    </connectionStrings>

Context和Migrations文件:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Configuration;
 4 using System.Data;
 5 using System.Data.Entity;
 6 using System.Data.Entity.Migrations;
 7 using System.Data.Entity.ModelConfiguration;
 8 using System.Data.Entity.ModelConfiguration.Conventions;
 9 using System.Linq;
10 using System.Text;
11 
12 namespace JobMaster.Libs.Models.DBContext
13 {
14     //[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
15     internal class JobMasterDBContext : DbContext
16     {
17         #region "Fields"
18         public const string CNSTR_CONNECTIONNAME = "JobDispatcher_Database_Entry";
19         public const string CNSTR_CONNECTIONNAME_MSSQL = "JobMasterDBConnection_MSSQL";
20         public const string CNSTR_CONNECTIONNAME_MYSQL = "JobMasterDBConnection_MYSQL";
21         public const string CNSTR_CONNECTIONNAME_SQLITE = "JobMasterDBConnection_SQLite";
22         #endregion
23 
24         #region "Constructs"
25         public JobMasterDBContext()
26             : this(ConfigurationManager.AppSettings[CNSTR_CONNECTIONNAME])
27         { }
28 
29         public JobMasterDBContext(string connectionName)
30             : base(connectionName)
31         {
32             this.Configuration.LazyLoadingEnabled = false;
33             this.Configuration.ProxyCreationEnabled = false;
34         }
35 
36         static JobMasterDBContext()
37         {
38             switch (ConfigurationManager.AppSettings[CNSTR_CONNECTIONNAME])
39             {
40                 case CNSTR_CONNECTIONNAME_MSSQL:
41                     break;
42                 case CNSTR_CONNECTIONNAME_MYSQL:
43                     DbConfiguration.SetConfiguration(new MySql.Data.Entity.MySqlEFConfiguration());
44                     Database.SetInitializer<JobMasterDBContext>(new MigrateDatabaseToLatestVersion<JobMasterDBContext, JobMaster.Libs.Models.Migrations.JobMasterDBConfiguration>());
45                     break;
46                 case CNSTR_CONNECTIONNAME_SQLITE:
47                     //Database.SetInitializer<JobMasterDBContext>(new DropCreateDatabaseAlways<JobMasterDBContext>());
48                     break;
49             }
50         }
51         #endregion
52 
53         #region "Propertiess"
54         public DbSet<Agent> Agents { get; set; }
55 
56         public DbSet<Job> Jobs { get; set; }
57 
58         public DbSet<TestCase> TestCases { get; set; }
59 
60         public DbSet<Task> Tasks { get; set; }
61 
62         public DbSet<TaskAssignment> TaskAssignments { get; set; }
63         #endregion
64 
65         #region "Events"
66         protected override void OnModelCreating(DbModelBuilder modelBuilder)
67         {
68             modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
69             modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
70 
71             //modelBuilder.Entity<EntityType>().MapToStoredProcedures();
72 
73             modelBuilder.Entity<TestCase>().Property(p => p.TaskID).IsOptional();
74             modelBuilder.Entity<Task>().HasMany(p => p.TestCases).WithOptional().HasForeignKey(p => p.TaskID);
75         }
76         #endregion
77     }
78 }
namespace JobMaster.Libs.Models.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class JobMasterDBConfiguration : DbMigrationsConfiguration<JobMaster.Libs.Models.DBContext.JobMasterDBContext>
    {
        public JobMasterDBConfiguration()
        {
            AutomaticMigrationsEnabled = true;

            switch (System.Configuration.ConfigurationManager.AppSettings[JobMaster.Libs.Models.DBContext.JobMasterDBContext.CNSTR_CONNECTIONNAME])
            {
                case JobMaster.Libs.Models.DBContext.JobMasterDBContext.CNSTR_CONNECTIONNAME_MSSQL:
                    break;
                case JobMaster.Libs.Models.DBContext.JobMasterDBContext.CNSTR_CONNECTIONNAME_MYSQL:
                    SetSqlGenerator("MySql.Data.MySqlClient.EF6", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
                    break;
                case JobMaster.Libs.Models.DBContext.JobMasterDBContext.CNSTR_CONNECTIONNAME_SQLITE:
                    break;
            }
        }

        protected override void Seed(JobMaster.Libs.Models.DBContext.JobMasterDBContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data. E.g.

        }
    }
}

Model:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;

using JobMaster.Libs.Models;
using JobMaster.Libs.Models.ViewModels;
using JobMaster.Libs.Utils;
using JobMaster.Libs.Utils.Extensions;

namespace JobMaster.Libs.Models
{
    [Table("tbl_Jobs")]
    public class Job
    {
        #region "Constructs"
        public Job() { }
        #endregion

        #region "Properties"
        [Key]
        [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
        public long ID { get; set; }

        [MaxLength(100)]
        public string Name { get; set; }

        [MaxLength(300)]
        public string Description { get; set; }

        public Nullable<bool> EnableSliceSet { get; set; }

        public Nullable<int> MinialSliceSize { get; set; }

        [Required]
        [MaxLength(300)]
        public string PrepConfig { get; set; }

        public Nullable<int> Priority { get; set; }

        public Nullable<JobType> JobType { get; set; }

        public Nullable<JobStatus> Status { get; set; }

        public Nullable<int> TotalCount { get; set; }

        public Nullable<int> TotalSuccess { get; set; }

        public Nullable<int> TotalFailure { get; set; }

        public Nullable<int> TotalTimeout { get; set; }

        public Nullable<System.DateTime> CreateTime { get; set; }

        public Nullable<System.DateTime> StartTime { get; set; }

        public Nullable<System.DateTime> EndTime { get; set; }

        public Nullable<System.DateTime> UpdateTime { get; set; }
        #endregion

        #region "Properties"
        public virtual ICollection<TestCase> TestCases { get; set; }

        public virtual ICollection<Task> Tasks { get; set; }
        #endregion
    }
}

如何使用:

JobMasterDBContext  dbcontext=new JobMasterDBContext();
dbcontext.Jobs.add(new Job(){Name="test"});
dbcontext.SaveChanges();


注意:在需要用到db 的项目中也需要添加以上Dll。

发表评论
用户名: 匿名