Я использую вышеупомянутые технологии и столкнулся с тем, что, как я полагаю, является проблемой дизайна, которую я сделал.
У меня есть таблица Artwork в моей БД, и я смог добавить искусство (теперь я думаю о них как о Цифровых продуктах) в корзину покупок + таблица CartLine. У меня есть система, которая добавляет искусство в галереи, учетные записи пользователей и т. Д. Отлично работает.
Теперь клиент хочет продать футболки, кружки, ручки и т. Д. «HardwareProducts», поэтому я создал таблицу «HardwareProducts».
Теперь у меня есть два разных типа продуктов в двух таблицах. Я использую GUID в качестве PK в таблице HardwareProducts и Artwork. Когда покупатель добавляет товар в свою корзину, я сохраняю GUID в столбце ProductID в таблице CartItems.
Проблема в том, что база данных не будет знать, на какую таблицу ссылаться, когда я перенесу объект LineItem через мой ORM во внешний интерфейс.
В ООП я вижу, как у вас будет базовый класс Product, а затем класс DigitalProduct и класс HardwareProduct, но как вам смоделировать это в SQL Server и Entity Framework, или есть другой способ?
EDIT:
Это то, что у меня есть в тестовом приложении на данный момент, благодаря комментариям ниже. Уловка, которая сделала это для меня, заключалась в использовании симуляции ORM к тому, на что указывал Стефан. Это привело меня к этой превосходной статье.
альтернативный текст http://img411.imageshack.us/img411/3568/32654541.jpg
Позволяет:
int prodCount = _entities.Product.OfType<ArtWork>().Count();
IEnumerable<LineItem> lineItem = _entities.LineItem.Include("Product");
int artWorkCount = lineItem.Select(p => p.Product).OfType<ArtWork>().Count();
ArtWork prod = new ArtWork();
prod.Price = 2;
prod.ProductName = "atlast";
prod.Downloads = 3;
prod.GalleryID = 1;
_entities.AddToProduct(prod);
_entities.SaveChanges();
Я собираюсь интегрировать его в свое основное решение и сообщу вам, если у меня появятся какие-либо результаты, но я думаю, все выглядит хорошо. NB. Похоже, что столбец Type, о котором упоминалось, на самом деле не был нужен в конце, что стало приятным сюрпризом благодаря чистому решению, предоставленному ORM. Спасибо всем