برای جدول محصولات بجای تعریف خاصیت های مختلف و منحصر برای کالاهای مختلف از جداولی بصورت key value استفاده کنید
در این روش بجای اینکه جدول کالا ها با چند جدول مختلف join شود فقط با یک یا دو جدول ارتباط دارد
مثالی میزنم
موجودیت کالا و مواد
public class Item
{
public virtual string ItemName { get; set; }
public virtual string AliasName { get; set; }
public virtual string ItemNumber { get; set; }
public virtual string SerialNumber { get; set; }
public virtual string AssetNumber { get; set; }
public virtual bool IsExpierd { get; set; }
public virtual int TotalQty { get; set; }
public virtual string ImageUrl { get; set; }
public virtual float Barcode { get; set; }
public virtual bool Discontinue { get; set; }
public virtual ICollection<ItemPropertyValue> ItemPropertyValues { get; set; }
}
موجودیت بعدی لیست خواصی هست که برای تمام کالا ها میتوان تصور کرد
مثلا رنگ-سرعت-توان-فرکانس
public class ItemProperty:EntityBase
{
public virtual string PropertyName { get; set; }
public virtual ItemPropertyType ItemPropertyType { get; set; }
public virtual ICollection<ItemPropertyValue> ItemPropertyValues { get; set; }
}
موجودیت بعدی تعریف خواص برای کالا ها هست
مثال: کالای سی پی یو و تعداد زیادی خواص مربوط به خود مثل سرعت یا باس و غیره
public class ItemPropertyValue:EntityBase
{
[ForeignKey("ItemId")]
public virtual Item Item { get; set; }
public virtual int ItemId { get; set; }
[ForeignKey("ItemPropertyId")]
public virtual ItemProperty ItemProperty { get; set; }
public virtual int ItemPropertyId { get; set; }
public string Value { get; set; }
}
البته میتونید به جدول کالا ItemCategoryId هم اضافه کنید و یا جدول برند محصولات هم یک رابطه داشته باشید