由code生成数据库model

在做项目的时候,用到了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.Data, System.Sata.DataSetExtension, System.Data.SQLite,System.Data.SQLite.EF6,System.Data.SQLite.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。

你可能感兴趣的:(Model)