C# EF Core 2.1所属类型的变化是什么?

C# EF Core 2.1所属类型的变化是什么?,c#,entity-framework-core,ef-core-2.1,C#,Entity Framework Core,Ef Core 2.1,上次更改是在2018年2月26日,但有一些突破性的更改需要修复 我有MyProcessContext类型,用于许多实体: public class RequestData { public Guid CorrelationId { get; set; } public DateTime Updated { get; set; } public MyProcessContext ProcessContext { get; set; } } public class My

上次更改是在2018年2月26日,但有一些突破性的更改需要修复

我有
MyProcessContext
类型,用于许多实体:

public class RequestData
{
    public Guid CorrelationId { get; set; }
    public DateTime Updated { get; set; }

    public MyProcessContext ProcessContext { get; set; }
}

public class MyProcessContext
{
    public int ClientId { get; set; }
}

public class EntityConfiguration : IEntityTypeConfiguration<RequestData>
{
    public void Configure(EntityTypeBuilder<RequestData> builder)
    {
        // all mapped by convention

        builder.OwnsOne(x => x.ProcessContext);

        builder.Property(x => x.Updated).IsRowVersion();

        builder.HasKey(x => x.CorrelationId);
        builder.Property(x => x.CorrelationId).ValueGeneratedNever();
    }
}
升级后调试视图包含

  EntityType: RequestData
      ...
      ProcessContext (<ProcessContext>k__BackingField, MyProcessContext) ToDependent MyProcessContext 0 -1 1 -1 -1
      ...
  EntityType: MyProcessContext
    Properties: 
      RequestDataCorrelationId (no field, Guid) Shadow Required PK FK AfterSave:Throw 0 0 0 0 -1
      ClientId (int) Required 1 1 -1 -1 -1
    Keys: 
      RequestDataCorrelationId PK
    Foreign keys: 
      MyProcessContext {'RequestDataCorrelationId'} -> RequestData {'CorrelationId'} Unique Ownership ToDependent: ProcessContext
    Annotations: 
      Relational:TableName: process_request
      RelationshipDiscoveryConvention:NavigationCandidates: System.Collections.Immutable.ImmutableSortedDictionary`2[System.Reflection.PropertyInfo,System.Type]
entityIsOwned
为true,但
entity.DefiningNavigationName
现在为null


我需要这个名字。

到目前为止唯一的官方变化(EF Core 2.1)是添加了

然而,很明显,在实现中出现了突破性的变化,因此
definingTityType
DefiningNavigationName
属性不再可靠(它们也没有文档化,只是“标准”生成的无用属性“获取定义实体类型”和“获取定义导航的名称”)

通过实验,我发现只有当拥有的类型在多个实体中使用时,才会填充它们。不知道他们为什么这么做,但主要的一点是我们不应该使用它们,而且EF核心代码本身似乎也不再使用它们了

据我所见,
isoownership
definingTityType
DefiningNavigationName
术语由具有
isoownership
属性等于
true
的外键确定

换言之:

var ownershipFk = entityType.GetForeignKeys().FirstOrDefault(fk => fk.IsOwnership);
var isOwned = ownershipFk != null;
var definingEntityType = ownershipFk?.PrincipalEntityType;
var definingNavigationName = ownershipFk?.PrincipalToDependent.Name;
foreach (var entity in modelBuilder.Model.GetEntityTypes())
            {
                var entityIsOwned = entity.IsOwned();
var ownershipFk = entityType.GetForeignKeys().FirstOrDefault(fk => fk.IsOwnership);
var isOwned = ownershipFk != null;
var definingEntityType = ownershipFk?.PrincipalEntityType;
var definingNavigationName = ownershipFk?.PrincipalToDependent.Name;