Я работаю с существующей базой данных, поэтому изменение схемы невозможно. Вот таблицы, с которыми я работаю...
Product
-------------------------------------
ID - GUID [PK]
Name - varchar(100)
ModelId - GUID [FK1, FK2]
SoftWareVersion - varchar(10) [FK2]
[FK1] Foreign Key to Model table
[FK2] Foreign Composite key to SoftwareVersion table
ProductModel
-------------------------------------
ID - GUID [PK]
ModelName - varchar(100)
SoftwareVersion
-------------------------------------
ID - GUID [PK]
Version - varchar(10)
ModelId - GUID [FK1]
[FK1] Foreign Key to Model table
На каждом отдельном продукте установлено программное обеспечение. У нас есть несколько моделей продуктов, и каждый продукт, очевидно, связан с одной моделью (Product [FK1]).
В течение срока службы каждой модели продукта может быть выпущено несколько обновлений/версий программного обеспечения. Аналогичным образом Программное обеспечение может быть установлено на многие Модели.
Мне нужно иметь возможность получить ProductID и вернуть версию программного обеспечения, установленную на этом конкретном продукте. Обычно я получаю версию программного обеспечения, связанную с моделью продукта, который я ищу, но модель может иметь несколько обновлений. Я не могу выполнить поиск только по полю Product.SoftwareVersion, так как это вернет ВСЕ различные модели, на которых было установлено это программное обеспечение.
Итак, в конечном итоге мне нужно вернуть запись из SoftwareVersion, где ModelId и версия совпадают с данными для продукта, который я ищу.
Я хотел бы вернуть SoftwareVersion как свойство продукта...
Product.SoftwareVersion
В моем определении ProductEntity у меня есть следующее...
[Table("Product")]
public class ProductEntity
{
[ForeignKey("Model")]
public Guid ModelID { get; set; }
public virtual ProductModelEntity Model { get; set; }
[ForeignKey("SoftwareVersion")]
public String SoftwareVersionNumber { get; set; }
public virtual SoftwareVersionEntity SoftwareVersion { get; set; }
}
Таким образом, «ModelID» выполняет роль внешнего ключа для модели и как часть составного внешнего ключа для версии программного обеспечения. Однако я не могу назначить несколько атрибутов ForeignKey одному и тому же свойству...
[ForeignKey("Model"),ForeignKey("SoftwareVersion")]
public Guid ModelID { get; set; }
public virtual ProductModelEntity Model { get; set; }
Я предпочитаю работать с атрибутами, если это возможно, но я также открыт для других методов. (Атрибуты описывают класс непосредственно в соответствующем коде, а не распространяют определение по библиотеке. Приятно понимать, на что вы смотрите, вместо того, чтобы тратить время на поиск определений... но я отвлекся!)
Любая помощь, как всегда, приветствуется.
Спасибо
-G