方法:从dbcontext到objectcontext
DbContext及其相关的API是中一大新特性。简单说,DbContext就是之前EF的核心类ObjectContext的抽象封装。如果用.NET Reflector看一下DbContext的内部实现,不难发现其内部有一私有成员_internalContext,它属于InternalContext这一Internal的类。DbContext内部的许多函数就是通过InternalContext.ObjectContext属性来得到其内部封装的ObjectContext类并调用其方法的。由于_internalContext是私有成员,要得到它的值需动用反射,好像太劳师动众了。今天为大家介绍十分方便的一个小技巧来得到DbContext内部封装的ObjectContext。
DbContext实现两个接口:IDisposable和。前者的博大精深在本文就不提及了。IObjectContextAdapter按照,就是为了让我们方便得到DbContext内部封装的ObjectContext而设计的。所以很简单:
转换一下DbContext的接口类型就行了!
引自
方法:从 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; }
引自
以上均亲测可以,ef6 。
还是要忘恩负义吐槽一句
SELECT * FROM sys.columns WHERE object_id = object_id('mytable') AND name = 'mycolumn'
这样即可。
不支持就是不支持嘛,这么复杂的支持,与不支持何异。