如何检查unit testing在ORM模型中计算的属性标记?
我是由Entity Framework 5.0(C#4.5)创建的ORM – 数据库优先。
实体的一些属性我被标记为计算(绑定到具有默认值的列)。
如何检查unit testing在ORM模型中计算的属性标记?
注意:在ORM中紧急重新创建实体后,需要测试控制计算属性。
* .edmx中的实体描述:
我不确定这是否适用于您的情况 – 但如果您想在运行时阅读metadata
– 从EntityFramework model
您可以尝试我之前的post中提到的一些内容(并由OP进一步改进)……
我如何以编程方式读取EF DbContext元数据?
这谈到了DbContext
(你可以从任何一方工作,所以这也适用于你) – 但具体来说,只需获取ObjectContext
– 并从这一点继续……
var container = objectContext.MetadataWorkspace.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace); // and just to get you started... var baseset = objectContext .MetadataWorkspace .GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace) .BaseEntitySets .First(meta => meta.ElementType.Name == "MyBaseClass"); var elementType = objectContext .MetadataWorkspace .GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace) .BaseEntitySets .First(meta => meta.ElementType.Name == "MyBaseClass") .ElementType; EdmMember member = elementType.Members[2]; // eg 3rd property Facet item; if (member.TypeUsage.Facets.TryGetValue("StoreGeneratedPattern", false, out item)) { var value = ((StoreGeneratedPattern)item.Value) == StoreGeneratedPattern.Computed; }
您将获得MetadataWorkspace ,您可以从那里开始工作。
我们设法提取导航属性等 – 但每个属性可能还有一些其他信息 – 比如calculated
。 我没有尝试,但它可能有所帮助。
此外,我还没有在模型或数据库上尝试过这个 – 但我不明白为什么它不应该工作 – 基础设施是相同的(EF,而不是代码优先)。
编辑:我添加了一个更具体的代码,以帮助您入门 (请参阅编辑的代码)。 这种工作(让你在’facets’存储的地方),它不是现成的代码,需要更多的工作。