如何检查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’存储的地方),它不是现成的代码,需要更多的工作。