I try to migrate from NHibernate to EF Core. I added a repository pattern and migrate repo per repo. No I run into problems with navigation properties.
System.InvalidOperationException: The property or navigation ‘ReadJob’ cannot be added to the entity type ‘ProductRead’ because a property or navigation with the same name already exists on entity type ‘ProductRead’.
Model builder looks like this:
modelBuilder.Entity<ProductRead>(entity =>
{
entity.Property(e => e.Id).ValueGeneratedNever();
entity.Property(e => e.ImageUrl).IsRequired(false);
entity.Property(e => e.AbsDeviation)
.HasColumnName("absDeviation")
.HasComputedColumnSql("(abs([Quantity]-[ExpectedQuantity]))", false);
entity.Property(e => e.ImageUrl).HasMaxLength(255);
entity.Property(e => e.NegativeDeviation)
.HasColumnName("negativeDeviation")
.HasComputedColumnSql("(case when [ExpectedQuantity]>[Quantity] then [Quantity]-[ExpectedQuantity] else (0) end)", false);
entity.Property(e => e.PositiveDeviation)
.HasColumnName("positiveDeviation")
.HasComputedColumnSql("(case when [Quantity]>[ExpectedQuantity] then [Quantity]-[ExpectedQuantity] else (0) end)", false);
entity.Property(e => e.Sku).HasMaxLength(36);
entity.Property(e => e.Version)
.IsRowVersion()
.IsConcurrencyToken();
entity.HasOne(e => e.ReadJob)
.WithMany(e => e.ProductReads)
.HasForeignKey(e => e.ReadJobId)
.HasConstraintName("FK_ProductReads_ReadJobId_ReadJob_Id")
.IsRequired(false)
.OnDelete(DeleteBehavior.Cascade);
entity.HasIndex(e => e.Created, "IX_ProductReads_Created_Quantity_ReadJobId_Sku")
.HasFillFactor(90);
entity.HasIndex(e => e.ReadJob, "IX_ProductReads_ReadJobId_CreatedSkuQuantityExpectedQuantityImageUrlNoStockTransferVersion")
.HasFillFactor(90);
entity.HasIndex(e => e.ReadJob, "IX_ProductReads_ReadJobId_Incl_Sku")
.HasFillFactor(80);
entity.HasIndex(e => new { e.ReadJob, e.Sku }, "IX_ProductReads_ReadJobId_Sku_cover")
.HasFillFactor(80);
});
ProductRead
class:
public class ProductRead : EntityBase<Guid>
{
public ProductRead()
{
this.ProductEntries = new List<ProductEntry>();
}
public virtual Guid? ReadJobId { get; set; }
public virtual ReadJob ReadJob { get; set; }
public virtual DateTime Created { get; set; }
public virtual string Sku { get; set; }
public virtual int? Quantity { get; set; }
public virtual int ExpectedQuantity { get; set; }
public virtual bool NoStockTransfer { get; set; }
public virtual int? Deviation
{
get
{
if (this.Quantity != null)
{
return this.Quantity.Value - this.ExpectedQuantity;
}
return null;
}
}
public virtual IList<ProductEntry> ProductEntries { get; protected set; }
public virtual string ImageUrl { get; set; }
public virtual int? AbsDeviation { get; }
public virtual int? PositiveDeviation { get; }
public virtual int? NegativeDeviation { get; }
}
ReadJob
class:
public class ReadJob : EntityBase<Guid>
{
public ReadJob()
{
this.ProductReads = new List<ProductRead>();
}
public virtual DateTime Created { get; set; }
public virtual DateTime? Completed { get; set; }
public virtual DateTime? Started { get; set; }
public virtual int UserId { get; set; }
public virtual ReadJobState State { get; set; }
public virtual Guid? AssignmentId { get; set; }
public virtual Assignment Assignment { get; set; }
public virtual IList<ProductRead> ProductReads { get; set; }
public virtual ReadType ReadType { get; set; }
}
I checked all but what am I missing?