Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过单元测试检查属性标记为ORM模型中计算的属性?_C#_Entity Framework_Unit Testing_Entity Framework 5 - Fatal编程技术网

C# 如何通过单元测试检查属性标记为ORM模型中计算的属性?

C# 如何通过单元测试检查属性标记为ORM模型中计算的属性?,c#,entity-framework,unit-testing,entity-framework-5,C#,Entity Framework,Unit Testing,Entity Framework 5,我是由EntityFramework5.0(C#4.5)创建的ORM——首先是数据库 我标记为计算的实体的某些属性(绑定到具有默认值的列) 如何通过单元测试检查属性标记为ORM模型中计算的属性 注意:在ORM中紧急重新创建实体后,测试需要控制计算属性 *.edmx中的实体描述: <EntityType Name="Users"> <Key> <PropertyRef Name="Identifier" /> &l

我是由EntityFramework5.0(C#4.5)创建的ORM——首先是数据库

我标记为计算的实体的某些属性(绑定到具有默认值的列)

如何通过单元测试检查属性标记为ORM模型中计算的属性

注意:在ORM中紧急重新创建实体后,测试需要控制计算属性

*.edmx中的实体描述:

    <EntityType Name="Users">
      <Key>
        <PropertyRef Name="Identifier" />
      </Key>
      <Property Name="Identifier" Type="bigint" Nullable="false" 
                StoreGeneratedPattern="Identity" />
      <Property Name="Name" Type="nvarchar" Nullable="false" MaxLength="32" />
      <Property Name="PasswordHashCode1" Type="int" Nullable="false" />
      <Property Name="PasswordHashCode2" Type="int" Nullable="false" />
      <Property Name="CreateDateTime" Type="datetime2" Nullable="false" 
                StoreGeneratedPattern="Computed" />
    </EntityType>

我不确定这是否适用于您的案例-但如果您想在运行时阅读
元数据-
EntityFramework模型-
中的
元数据,您可以尝试我在前面的帖子中提到的一些事情(并通过OP进一步改进)

这涉及到
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]; // e.g. 3rd property
Facet item;
if (member.TypeUsage.Facets.TryGetValue("StoreGeneratedPattern", false, out item))
{
    var value = ((StoreGeneratedPattern)item.Value) == StoreGeneratedPattern.Computed;
}
你可以从那里开始工作

我们设法提取了导航属性等-但每个属性可能还有一些其他信息-如
计算的
。我还没试过,但可能会有帮助

此外,我还没有在模型或数据库上尝试过这一点——但我不明白为什么它不应该工作——基础设施是相同的(EF,而不是代码优先)


编辑:我添加了一个更具体的代码,让您开始使用(请参阅编辑的代码)。这种方法很有效(可以将“facet”存储在哪里),它还没有准备好使用代码,需要做更多的工作。

我不确定这是否适用于您的情况-但是如果您想在运行时从
EntityFramework模型
中读取
元数据,您可以尝试我在前面的帖子中提到的一些事情(并通过OP进一步改进)

这涉及到
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]; // e.g. 3rd property
Facet item;
if (member.TypeUsage.Facets.TryGetValue("StoreGeneratedPattern", false, out item))
{
    var value = ((StoreGeneratedPattern)item.Value) == StoreGeneratedPattern.Computed;
}
你可以从那里开始工作

我们设法提取了导航属性等-但每个属性可能都有一些其他信息-如
计算的
。我没有尝试过,但可能会有所帮助

此外,我还没有在模型或数据库上尝试过这一点——但我不明白为什么它不应该工作——基础设施是相同的(EF,而不是代码优先)


编辑:我添加了一个更具体的代码来帮助您入门(请参阅编辑的代码)。这种方法很有效(可以让您找到“facet”的存储位置),尚未准备好使用代码,需要做更多的工作。

是否要在创建实体后测试计算属性是否具有特定值?否,仅检查属性是否已计算。在早期版本中,EF或Linq2Sql属性似乎由相应的属性标记。在EF 5.0实体中-其简单对象。是否要若要在创建实体后测试计算属性是否具有特定值?否,请仅检查该属性是否已计算。在早期版本中,EF或Linq2Sql属性似乎由相应的属性标记。在EF 5.0实体中-其简单对象。