优府网首页
设为首页
点击进入优府网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 { getset; }
        public IDbSet<Son> Son { getset; }
 
        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 { getset; }
        public string Name { getset; }
 
        public ICollection<Son> Children { getset; }
    }
 
    public class Son     {
        public int Id { getset; }
        public string Name { getset; }
 
        public int Pid { getset; }
        public Father Father { getset; }
    }
}

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

    0
    难过
    难过

    0
    愤怒
    愤怒

    0
    喜欢
    喜欢

    0
    无聊
    无聊

    0
    鼓掌
    鼓掌

    0
    惊奇
    惊奇

    0
    骂人
    骂人

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