Итак, классы сущностей вашего домена будут выглядеть примерно так:
public enum ColorEnum : byte
{
Red = 1,
Blue = 2
}
public class Part
{
public long Id { get; private set; }
public ColorEnum Color { get; private set; }
public Bin Bin { get; private set; }
public int BinId { get; private set; }
}
public class Bin
{
public int Id { get; private set; }
public Warehouse Warehouse { get; private set; }
public short WarehouseId { get; private set; }
public ICollection<Part> Parts { get; private set; }
}
public class Warehouse
{
public short Id { get; private set; }
public ICollection<Bin> Bins { get; private set; }
}
Поскольку вы хотите, чтобы ваши детали теперь имели уникальный цвет для каждого склада, теперь им необходимо знать об их складе.Поэтому добавьте ссылку на Склад внутри класса Part:
public class Part
{
public long Id { get; private set; }
public ColorEnum Color { get; private set; }
public Bin Bin { get; private set; }
public int BinId { get; private set; }
public Warehouse Warehouse { get; private set; }
public short WarehouseId { get; private set; }
}
Теперь мы хотим создать уникальный индекс для класса Part для: (WarehouseId, Color).
Мы можем достичь этогодвумя способами:
1) Добавляя аннотации к свойствам вашей сущности (из пространства имен System.ComponentModel.DataAnnotations.Schema
):
public class Part
{
public long Id { get; private set; }
[Index("UX_Warehouse_Color", 2, IsUnique = true)]
public ColorEnum Color { get; private set; }
public Bin Bin { get; private set; }
public int BinId { get; private set; }
public Warehouse Warehouse { get; private set; }
[Index("UX_Warehouse_Color", 1, IsUnique = true)]
public short WarehouseId { get; private set; }
}
2) Используя свободный API EntityFramework внутри нашего DbContext
реализация класса в переопределении для метода protected virtual void DbContext.OnModelCreating(DbModelBuilder modelBuilder);
:
modelBuilder.Entity<Part>()
.HasIndex(part => new { part.WarehouseId, part.Color })
.IsUnique();