码迷,mamicode.com
首页 > 其他好文 > 详细

Entity Freamwork Demo1

时间:2017-10-05 17:15:22      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:key   org   选择   代码   state   highlight   ade   上下文   声明   

一、前言

        之前给一个朋友解释EF是什么个东东,解释了半天也没有说到点子上,这也说明了我对EF的了解也不是很好。因此,本文将会介绍我是如何使用EF框架,用的不一定很合适。

        为了方便的是使用EF框架,给大家分享一个使用EF的demo。

二、代码结构

           直接上图

            技术分享

           Sln.Data:放置了EF的一些操作类如继承了DbContext的EFDbContext

           Sln.Data.Platform:里面包含的是数据库中基础表的映射关系。

           Sln.Data.Common:里面所包含的是某一个模块表的映射关系。

           Sln.Data.Test:是一个控制台程序,代表了一个模块。

三、EF映射(Entity)

       1、先展示Entity是如何配置的:

/// <summary>
    /// 组织信息实体
    /// </summary>  
    [Table(name: "tblUaOrganize", Schema = "base")]
    public class TblUaOrganize  
    {
        /// <summary>
        /// 组织ID
        /// </summary>    
        [Key]
        [Column("Organize_strId")]
        public string OrganizeId { get; set; }

        /// <summary>
        /// 组织编号
        /// </summary>  
        [Column("Organize_strCode")]
        public string Code { get; set; }
        /// <summary>
        /// 组织名称
        /// </summary> 
        [Column("Organize_strName")]
        public string Name { get; set; }
        /// <summary>
        /// 组织描述
        /// </summary> 
        [Column("Organize_strDescription")]
        public string Description { get; set; }
        /// <summary>
        /// 上级组织Id
        /// </summary> 
        [Column("Organize_strParentId")]
        public string ParentId { get; set; }
        /// <summary>
        /// 组织管理人
        /// </summary> 
        [Column("Organize_strLeaderId")]
        public string LeaderId { get; set; }
        /// <summary>
        /// 序号
        /// </summary> 
        [Column("Organize_strIdxCode")]
        public string IdxCode { get; set; }
        /// <summary>
        /// 创建人
        /// </summary> 
        [Column("Organize_dtmCreate")]
        public DateTime? Create { get; set; }
        /// <summary>
        /// 创建时间
        /// </summary> 
        [Column("Organize_strCreator")]
        public string Creator { get; set; }


        /// <summary>
        /// 最后修改时间
        /// </summary>
        [Column("dtmLastModify")]
        public DateTime? LastModify { get; set; }

        /// <summary>
        /// 状态
        /// </summary>
        [Column("intEditState")]
        public short? EditState { get; set; }



        [ForeignKey(name: "OrganizeId")]
        public ICollection<TblUaOrganizeExtend> Extends { get; set; } 
    }

  

这里所采用的Mapping方式是DataAnnotations,之所以采用这种方式是为了快捷的知道对应关系,如果要写Mapping文件的话,需要到两个文件中进行查找,麻烦~,说白了就是懒。

四、连接数据库(DbContext)

    public class EFDbContext : DbContext
    {
        public EFDbContext(string connectString) : base(connectString)
        {
            this.Configuration.AutoDetectChangesEnabled = true;
            //延迟加载
            //默认情况下,延迟加载被支持,如果你希望禁用它,必须显式声明
            this.Configuration.LazyLoadingEnabled = true;

            Database.SetInitializer<EFDbContext>(null); 
        }
    }

  

EF的数据库连接时通过DbContext这个类创建连接。connectString可以是连接字符串也可以是在App.config中所配置的连接字符串。看个人选择。

  <connectionStrings>
    <add name="TestDbContext" connectionString="Data Source = .;Initial Catalog = SlnDB;User Id = sa;Password =sa" providerName="System.Data.SqlClient" />
  </connectionStrings>

  

 

五、使用EF

        1、在Sln.Data.Test中我创建了一个EF上下文TestDbContext,继承自Sln.Data中的EFDbContext。

              默认连接取得的是App.config中name为TestDbContext的数据库连接字符串。

 

    public class TestDbContext : EFDbContext
    {
        public TestDbContext()
            : base("TestDbContext")
        {

        }
        public DbSet<TblUaOrganize> UaOrganizes { get; set; }

        public DbSet<TblUaOrganizeExtend> UaOrganizeExtends { get; set; }

        public DbSet<TblDictionaryGroup> DictionaryGroups { get; set; }

    }

  

           2、获取数据

                在控制台的Program类中编写如下代码,获取数据。

                代码中所使用的获取数据方式是Linq,简单易学好上手。

    class Program
    {
        static void Main(string[] args)
        {
            var result = GetOrganize();
            Console.WriteLine(JsonConvert.SerializeObject(result)); 
            Console.WriteLine("----------------------------------------");
            var result2 = GetDictionaryGroup();
            Console.WriteLine(JsonConvert.SerializeObject(result2));
            Console.ReadLine();
        }

        public static List<TblUaOrganize> GetOrganize()
        {
            using (var db=new TestDbContext())
            {
                var query =  db.UaOrganizes.Include(c => c.Extends).ToList();
                return query;
            }
        }
        public static List<TblDictionaryGroup> GetDictionaryGroup()
        {
            using (var db = new TestDbContext())
            {
                var query = (from a in db.DictionaryGroups
                             select a).ToList();
                return query;
            }
        }
    }

 

 运行结果

技术分享

六、总结

     之所以将Sln.Data分出来是为了将低耦合,可以在Sln.Data中写一些EF的扩展方法或者拉姆达表达式的扩展。其他项目再使用EF时,就不会需要写很多的东西,只需要编写自定义的TestDbContext类就OK了。

最后附上代码:Sln_Data  

 

Entity Freamwork Demo1

标签:key   org   选择   代码   state   highlight   ade   上下文   声明   

原文地址:http://www.cnblogs.com/jeffrey-net/p/7629384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!