【发布时间】:2018-07-28 16:48:53
【问题描述】:
Docs 最后更改于 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();
}
}
它在 EF Core 2.0 中按预期工作。在调试视图中,对于自有类型 (RequestData.ProcessContext#MyProcessContext) 的每种用法,我都有不同的实体类型:
EntityType: RequestData
Properties:
CorrelationId (Guid) Required PK AfterSave:Throw 0 0 0 -1 -1
Annotations:
Relational:ColumnName: correlation_id
Updated (DateTime) Required Concurrency BeforeSave:Ignore AfterSave:Ignore ValueGenerated.OnAddOrUpdate 11 11 -1 -1 0
Annotations:
Relational:ColumnName: updated
Navigations:
ProcessContext (<ProcessContext>k__BackingField, MyProcessContext) ToDependent RequestData.ProcessContext#MyProcessContext 0 -1 1 -1 -1
Keys:
CorrelationId PK
Annotations:
Relational:TableName: process_request
RelationshipDiscoveryConvention:NavigationCandidates: System.Collections.Immutable.ImmutableSortedDictionary`2[System.Reflection.PropertyInfo,System.Type]
EntityType: RequestData.ProcessContext#MyProcessContext
Properties:
RequestDataCorrelationId (no field, Nullable<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:
RequestData.ProcessContext#MyProcessContext {'RequestDataCorrelationId'} -> RequestData {'CorrelationId'} Unique ToDependent: ProcessContext
Annotations:
Relational:TableName: process_request
RelationshipDiscoveryConvention:NavigationCandidates: System.Collections.Immutable.ImmutableSortedDictionary`2[System.Reflection.PropertyInfo,System.Type]
升级后调试视图包含
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]
像MyProcessContext 这样构建的模型是通常的实体。在像
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
var entityIsOwned = entity.IsOwned();
entityIsOwned 为真,但entity.DefiningNavigationName 现在为空。
我需要 custom name convention 的名称。
【问题讨论】:
标签: c# entity-framework-core ef-core-2.1