首页 新闻 会员 周边

entity framework在多层中怎么应用?

0
悬赏园豆:100 [已关闭问题] 关闭于 2016-08-16 14:14

目前要开发一个框架,多层架构,打算是客户端用wpf,客户端到应用服务器用wcf, wcf把业务类直接发布出来供客户端调用, 业务类使用ef进行数据库访问

我想直接把ef生成的实体类做为dto在各层之间传递,那么客户端与wcf和业务类之间应该怎样一个合作模式?EF有没有这方面的最佳实践供参考?

还有项目之间的引用和公用应该怎么划分比较合理?

 

希望能有详细些的个人经验和确实可行的方案哟.

问题补充:

还有, 需要在entityframework生成的那堆poco上添加, 如数据合法性检验, 直接idataerrorinfo, IEditableObject, INotifyPropertyChanged等接口, 大家有什么好的建议吗?是利用t4直接修改poco好还是用什么泛型比较方便解决?

kingcomxu的主页 kingcomxu | 初学一级 | 园豆:4
提问于:2013-04-26 09:16
< >
分享
所有回答(5)
0

封装成仓储模式

我现在就是这么封装的

使用延迟查询接口.

会写代码的熊猫 | 园豆:188 (初学一级) | 2013-04-26 09:23

仓储模式对我来说可能就是业务类的一种实现方式而已, 还有好多问题 需要解决的啊

例如实体类, 业务类抽象出来的接口(也是wcf里的契约), 客户端调用代理,  这么多层之间怎么分怎么引用, 有没有比较成熟的解决方案呢

支持(0) 反对(0) kingcomxu | 园豆:4 (初学一级) | 2013-04-26 10:28

@sweethome: 你可以看一下WPF里面一个MVVM的模式

就是实体类 跟 显示类分开

支持(0) 反对(0) 会写代码的熊猫 | 园豆:188 (初学一级) | 2013-04-27 15:04
0
/// <summary>
        /// Dto对象转Entity,只是复制属性,dto的属性要比entity少2个哦。
        /// </summary>
        /// <typeparam name="T">EntityObject</typeparam>
        /// <param name="dto">dto对象</param>
        /// <returns>EntityObject对应的实例</returns>
        public EntityObject ConvertToEntityObject<T>(object dto) where T : EntityObject
        {
            Type dtoEntity = dto.GetType();
            var piList = dtoEntity.GetProperties().Where(p => p.PropertyType.IsPublic == true).ToList();
            Assembly assembly = Assembly.GetAssembly(typeof(T));
            object resultObj = assembly.CreateInstance(string.Join(".",new string[]{typeof(T).Namespace,typeof(T).Name}));
            var piResultObj = resultObj.GetType().GetProperties().Where(p => p.PropertyType.IsPublic == true).ToList();
            foreach (System.Reflection.PropertyInfo pi in piList)
            {
                var sourcePi = piResultObj.Single(p => p.Name == pi.Name);
                 if (sourcePi != null)
                 {
                     object value = pi.GetValue(dto, null);
                     sourcePi.SetValue(resultObj, value, null);
                 }                    
            }
            return resultObj as EntityObject;
        }

http://www.cnblogs.com/datacool/archive/2012/06/19/Dto2Entity.html

数据酷软件 | 园豆:130 (初学一级) | 2013-04-26 16:28
0

试下cyq.data,用json在各层间传递性能最高。参考这篇文章:http://www.cnblogs.com/cyq1162/archive/2013/04/25/3040829.html

路过秋天 | 园豆:4787 (老鸟四级) | 2013-04-26 16:30
0

把你EF生成的那一大堆实体全部分离,剥离成单个的实体,然后你就可以对单个实体操作了

不负春光,努力生长 | 园豆:1382 (小虾三级) | 2013-04-26 22:52
0

嗯,把实体独立出来!

jerry-Tom | 园豆:4077 (老鸟四级) | 2013-04-27 10:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册