优府网首页
设为首页
点击进入优府网RSS订阅中心
当前位置:首页 >科技 > 正文

一种ef与 unit of work+repository的简单用法

1、建一套ef的codefirst的context和pococlass2、建uow接口和repository接口3、ef的context类实现uow接口,导向到ef本身的savechanges4、uow获取rep的接口需要做适配器导向到dbset5、建适配器,并导向到dbset6、通过ioc获取uow,实际获得到的是ef的contextusing System;using System.Collections;usin…

1、建一套ef的code first的context和poco class

2、建 uow接口和repository接口

3、ef的context类实现uow接口,导向到ef本身的savechanges

4、uow获取rep的接口需要做 适配器 导向到dbset

5、建适配器,并导向到dbset

6、通过ioc获取uow,实际获得到的是ef的context

 using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace efIncludeRepository
{
    class Program     {
        static void Main(string[] args)
        {
            using (var db = new DBC())
            {
                var list = db.Father.Include(x => x.Children).ToList();
 
                var uow = db as IUOW;
                var rep = uow.GetRep<Father>();
 
                var xx = rep.Include(x => x.Children).ToList();
 
                Console.WriteLine("ok");
            }
        }
    }
 
    public interface IUOW     {
        int SaveChanges();
        IRep<T> GetRep<T>() where T : class;
    }
 
    public interface IRep<T> : IQueryable<T> where T : class     {
        T Add(T obj);
    }
 
    public class DBC : DbContext,IUOW     {
        public IDbSet<Father> Father { get; set; }
        public IDbSet<Son> Son { get; set; }
 
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Father>().HasKey(x => x.Id);
            modelBuilder.Entity<Father>()
                .Property(x => x.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
 
            modelBuilder.Entity<Son>().HasKey(x => x.Id);
            modelBuilder.Entity<Son>()
                .Property(x => x.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
 
            modelBuilder.Entity<Father>()
                .HasMany(x => x.Children)
                .WithRequired(x => x.Father)
                .HasForeignKey(x => x.Pid)
                .WillCascadeOnDelete();
 
            base.OnModelCreating(modelBuilder);
        }
 
        public IRep<T> GetRep<T>() where T : class         {
            return new Ada<T>(Set<T>());
        }
    }
 
    public class Ada<T> : IRep<T> where T : class     {
        public IDbSet<T> set;
 
        public Ada(IDbSet<T> set)
        {
            this.set = set;
        }
 
 
 
        public IEnumerator<T> GetEnumerator()
        {
            return set.GetEnumerator();
        }
 
        IEnumerator IEnumerable.GetEnumerator()
        {
            return set.GetEnumerator();
        }
 
        public Type ElementType
        {
            get { return set.ElementType; }
        }
 
        public Expression Expression
        {
            get { return set.Expression; }
        }
 
        public IQueryProvider Provider
        {
            get { return set.Provider; }
        }
 
        public T Add(T obj)
        {
            return set.Add(obj);
        }
    }
 
    public class Father     {
        public int Id { get; set; }
        public string Name { get; set; }
 
        public ICollection<Son> Children { get; set; }
    }
 
    public class Son     {
        public int Id { get; set; }
        public string Name { get; set; }
 
        public int Pid { get; set; }
        public Father Father { get; set; }
    }
}

(科技责编:赵雅敏 )
2014年11月08日 17:52   [查看原文]  
相关阅读
    请选择您浏览此新闻时的心情
    疑问
    疑问

    0
    难过
    难过

    0
    愤怒
    愤怒

    0
    喜欢
    喜欢

    0
    无聊
    无聊

    0
    鼓掌
    鼓掌

    0
    惊奇
    惊奇

    0
    骂人
    骂人

    0
    (521)
    (521)
    分享到: 投稿
    最新评论
    推荐信息
    推荐产品
    资讯 国内 军事 ┊ 体育 篮球 足球 ┊ 娱乐 电影 电视 ┊ 财经 经济 消费 ┊ 科技 手机 电商 ┊ 女性 情感 时尚
    文化 历史 文学 ┊ 旅游 周边 出境 ┊ 美食 家常 健康 ┊ 房产 房价 调控 ┊ 汽车 新车 品牌 ┊ 教育 视频 博客
    关于优府网 ┊ 联系方式 ┊ 网站地图 ┊ 服务条款
    版权所有:山西优府信息技术开发有限公司 Copyright 2008-2013 All rights reserved.
    增值电信业务经营许可证 ┊ 广播电视节目制作许可证 ┊ 固定刊物许可证 ┊ 网络文化经营许可证