У меня есть следующие классы моделей:
public class Farmer
{
public int ID { get; set; }
public Box Box { get; set; }
}
public class Apple
{
public int BoxID { get; set; }
public Box Box { get; set; }
public int Number { get { return (int)V2.X; } set { V2 = new Vector2(value, 0); } }
public Vector2 V2 {get;set;}
public Farmer Owner { get; set; }
}
public class Box : IEnumerable<Apple>
{
public int ID { get; set; }
public ICollection<Apple> Apples { get; set; }
public IEnumerator<Apple> GetEnumerator()
{
return Apples.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return Apples.GetEnumerator();
}
}
Когда Box реализует IEnumerable <'Apple'>, свойство тени FarmerID добавляется в таблицу Apple:
migrationBuilder.AddColumn<int>(
name: "FarmerID",
table: "Apples",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_Apples_FarmerID",
table: "Apples",
column: "FarmerID");
migrationBuilder.AddForeignKey(
name: "FK_Apples_Farmers_FarmerID",
table: "Apples",
column: "FarmerID",
principalTable: "Farmers",
principalColumn: "ID",
onDelete: ReferentialAction.Restrict);
Когда Я комментирую реализацию IEnumerable, ожидаемая миграция создается без теневого свойства FarmerID. Почему генерируется это свойство shadow и как его можно удалить? (Я попытался проигнорировать это, но затем я получил FarmerID1).
Я должен упомянуть, что это мой контекстный класс:
public class Context : DbContext
{
public DbSet<Farmer> Farmers { get; set; }
public DbSet<Apple> Apples { get; set; }
public DbSet<Box> Boxes { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"...");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Apple>()
.HasOne(a => a.Box)
.WithMany(a => a.Apples)
.IsRequired();
modelBuilder.Entity<Apple>()
.Ignore(a => a.V2)
.Ignore(a => a.Owner)
.HasKey(a => new { a.BoxID, a.Number });
}
}