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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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
Entity framework 实体Framwork IsStoreGeneratedComputed false,即使列映射指定HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed)_Entity Framework - Fatal编程技术网

Entity framework 实体Framwork IsStoreGeneratedComputed false,即使列映射指定HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed)

Entity framework 实体Framwork IsStoreGeneratedComputed false,即使列映射指定HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed),entity-framework,Entity Framework,我已经使用fluentapi映射了一个列 Property(_ => _.Designation) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 在相应的迁移中,定义了一个UDF,并修改了表以将列映射到自定义UDF 但当我查询此字段的元数据时,我看到edmProperty.IsStoreGeneratedComputed==false。这是令人惊讶的;我想,是存储生成的计算机应该是正确的 无论如何,我想知道

我已经使用fluentapi映射了一个列

 Property(_ => _.Designation)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
在相应的迁移中,定义了一个UDF,并修改了表以将列映射到自定义UDF

但当我查询此字段的元数据时,我看到
edmProperty.IsStoreGeneratedComputed==false
。这是令人惊讶的;我想,
是存储生成的计算机
应该是正确的


无论如何,我想知道如何通过实体框架元数据检测列/字段实际上是计算出来的。谢谢

发生这种情况的原因是您正在查看的
EdmProperty
来自C空间,而不是S空间。因为它来自C空间,所以它表示实体属性,可以是标量属性,也可以是复杂属性。如果映射它,您可以得到S-space
EdmProperty
,它实际上表示数据库中的存储列,并且正如您所期望的那样,
IsStoreGeneratedComputed==true

public static bool IsComputed(this EdmProperty edmProperty) {
    //Note the attribute may be set to Computed even though edmProperty.IsStoreGeneratedComputed == false
    var storeGeneratedPatternAttribute = edmProperty.MetadataProperties.SingleOrDefault(_ => _.Name == "http://schemas.microsoft.com/ado/2009/02/edm/annotation:StoreGeneratedPattern");
    return storeGeneratedPatternAttribute != null && storeGeneratedPatternAttribute.Value.ToString() == "Computed";
}
下面介绍如何在属性和列之间映射

但是,可以从C空间标量
EdmProperties
中提取信息,而无需映射,尽管它的鲁棒性较差:

// Alternative, allows you to compare `== Identity`, `== Computed`, `!= None`, etc:
public static StoreGeneratedPattern GetSSpaceScalarColumnStoreGeneratedPattern(this EdmProperty property)
{
    MetadataProperty item;
    return property.MetadataProperties.TryGetValue("http://schemas.microsoft.com/ado/2009/02/edm/annotation:StoreGeneratedPattern", false, out item)
        ? (StoreGeneratedPattern)Enum.Parse(typeof(StoreGeneratedPattern), item.Value.ToString())
        : System.Data.Entity.Core.Metadata.Edm.StoreGeneratedPattern.None;
}