EF Core 是否支持 `Owned` 属性下的 `ComplexType`?

问题描述 投票:0回答:1

我正在将

ComplexTypeAttribute
用于一些我想要分组在一起的数据列,例如:

[ComplexType]
public record TrashData(DateTime? Value)
{
    public Identity By { get; init; } = Identity.Unknown;

    private string _reason = string.Empty;
    public string? Reason
    {
        get => _reason;
        init => _reason = string.IsNullOrWhiteSpace(value) ? string.Empty : value;
    }

    private static readonly TrashData _available = new TrashData((DateTime?)null);
    public static TrashData Available => _available;
}
[ComplexType]
public record Identity(string IdKind = "GUID", string? Value = null)
{
  public static readonly Identity Unknown = new("_","_");
}

我发现在另一个中添加

ComplexType
没有问题。

但是当我在

ComplexType
属性中添加
Owned
时,如下所示:

//(I'm using Asp Identity)
public class User : IdentityUser
{
    public required UserMetaData MetaData { get; set; } = new(default);
}
[Owned]
public record UserMetaData(string Id)
{
    public TrashData Trashed_ { get; set; } = TrashData.Available;
}

生成迁移后我遇到了构建问题:

'OwnedNavigationBuilder' does not contain a definition for 'ComplexProperty'

我尝试使用像这样的流畅方法手动指定这个属性很复杂,但它似乎不存在:

builder.Entity<User>(e =>
{
//  e.ComplexProperty(x => x.MetaData.Trashed_); // Can call ComplexProperty

    e.OwnsOne(
        x => x.MetaData,
        o =>
        {
            o.WithOwner().HasPrincipalKey(x => x.Id).HasForeignKey(x => x.Id);
            // o.ComplexProperty(x => x.Trashed_); // Can't call complex property here.
        }
    );
}

那么

EF Core 8
是否支持拥有的属性内的复杂类型?

Note: Migration is generated against SQLite.

c# .net entity-framework-core
1个回答
0
投票

经过一番研究,

.Net 8
.Net 9
目前不支持拥有属性下的复杂类型。 而且我认为这根本就不是计划中的
.Net 10

因此,请使用具有

owned
属性的其他方法,例如嵌套方法,或者根本不使用它。

© www.soinside.com 2019 - 2024. All rights reserved.