0

ドメインオブジェクト内でIDクラスを使用しようとしていますが、データベースを作成するための移行を作成したい場合、efコア2.2は私に言います:

System.Reflection.TargetInvocationException: 呼び出しのターゲットによって例外がスローされました。---> System.InvalidOperationException: 'Warehouse' は、ナビゲーションとして構成されているため、エンティティ タイプ 'Existence' のプロパティとして使用できません。

私のdbcontextは

public class WarehousesContext : BaseContext<WarehousesContext>
{
    public WarehousesContext(DbContextOptions<WarehousesContext> options) : base(options)
    {

    }
    public WarehousesContext() : base() { }
    public DbSet<Warehouse> Warehouses { get; set; }
    public DbSet<Existence> Existences { get; set; }
    public DbSet<Entry> Entries { get; set; }
    public DbSet<Exit> Exits { get; set; }
    public DbSet<Transfer> Transfers { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.HasDefaultSchema("Inventory");
        modelBuilder.Entity<Warehouse>().ToTable("Warehouses");
        modelBuilder.Entity<Warehouse>().HasKey(w => w.Id);
        modelBuilder.Entity<Warehouse>().Property(w => w.Id).HasConversion(v => v.Id, v => new WarehouseId(v));
        modelBuilder.Entity<Existence>().ToTable("Existences");
        modelBuilder.Entity<Existence>().HasKey(e => e.Id);
        modelBuilder.Entity<Existence>().Property(e => e.Id).HasConversion(v => v.Id, v => new ExistenceId(v));
        modelBuilder.Entity<Existence>().OwnsOne(e => e.Warehouse);
        modelBuilder.Entity<Existence>().OwnsOne(e => e.Product);
    }

}

私の存在クラスは

    public class Existence
{
    public ExistenceId Id { get; private set; }
    public WarehouseId Warehouse { get; private set; }
    public ProductId Product { get; private set; }
    public decimal Quantity { get; private set; }
    public string Batch { get; private set; }
    private Existence() { }
    public Existence(WarehouseId warehouse, ProductId product, decimal quantity, string batch)
    {
        Warehouse = warehouse;
        Product = product;
        Quantity = quantity;
        Batch = batch;
    }

    internal void Add(decimal quantity)
    {
        Quantity += quantity;
    }

    internal void Subtract(decimal quantity)
    {
        Quantity -= quantity;
        if (Quantity < 0)
            throw new Exception();
    }

そして私の WarehouseId クラス

public class WarehouseId 
{
    public string Id { get; private set; }
    public WarehouseId()
    {
        this.Id = Guid.NewGuid().ToString();
    }
    public WarehouseId(string id)
    {
        Id = id;
    }
}

問題は、「entityId」パターンを使用してIDクラスに名前を付けていることだと思うので、efコアに「ここでナビゲーションプロパティの対流を使用しないでください」と伝える方法が存在するかどうかを知りたい

4

1 に答える 1