ef 吐糟

方法:从dbcontext到objectcontext

DbContext及其相关的API是EF4.1中一大新特性。简单说,DbContext就是之前EF的核心类ObjectContext的抽象封装。如果用.NET Reflector看一下DbContext的内部实现,不难发现其内部有一私有成员_internalContext,它属于InternalContext这一Internal的类。DbContext内部的许多函数就是通过InternalContext.ObjectContext属性来得到其内部封装的ObjectContext类并调用其方法的。由于_internalContext是私有成员,要得到它的值需动用反射,好像太劳师动众了。今天为大家介绍十分方便的一个小技巧来得到DbContext内部封装的ObjectContext。

 

DbContext实现两个接口:IDisposableIObjectContextAdapter。前者的博大精深在本文就不提及了。IObjectContextAdapter按照MSDN文档,就是为了让我们方便得到DbContext内部封装的ObjectContext而设计的。所以很简单:

 

var context  =  ((IObjectContextAdapter)dbContext).ObjectContext;

 

转换一下DbContext的接口类型就行了! 

 引自 http://www.cnblogs.com/LingzhiSun/archive/2011/03/30/EF_Trick1.html 

 

方法:从 objectcontext获取字段maxLength

public static int? GetMaxLength(this EntityObject entite, string nomPropriete)
    {
        int? result = null;
        using (XEntities contexte = XEntities.GetCurrentContext())
        {
            var queryResult = from meta in contexte.MetadataWorkspace.GetItems(DataSpace.CSpace)
                               .Where(m => m.BuiltInTypeKind == BuiltInTypeKind.EntityType)
                              from p in (meta as EntityType).Properties
                                 .Where(p => p.DeclaringType.Name == entite.GetType().Name
                                     && p.Name == nomPropriete
                                     && p.TypeUsage.EdmType.Name == "String")
                              select p.TypeUsage.Facets["MaxLength"].Value;
            if (queryResult.Count() > 0)
            {
                result = Convert.ToInt32(queryResult.First());
            }
        }
        return result;
    }


引自 http://stackoverflow.com/questions/748939/field-max-length-in-entity-framework 

 

 

以上均亲测可以,ef6 。

还是要忘恩负义吐槽一句

SELECT * FROM sys.columns WHERE object_id = object_id('mytable') AND name = 'mycolumn'

这样即可。

不支持就是不支持嘛,这么复杂的支持,与不支持何异。

 

转载于:https://www.cnblogs.com/baozhu/p/4861948.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值