既存のデータベースを使用しているため、スキーマを変更することはできません。これが私が使用しているテーブルです...
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
各個別製品にはソフトウェアがインストールされています。いくつかの製品モデルがあり、各製品は明らかに 1 つのモデル (製品 [FK1]) に関連付けられています。
各製品モデルの使用期間中に、複数のソフトウェア アップデート/バージョンが適用された可能性があります。同様に、ソフトウェアは多くのモデルにインストールできます。
ProductID を取得して、その特定の製品にインストールされているソフトウェア バージョンを返すことができる必要があります。通常、検索している製品のモデルに関連付けられたソフトウェア バージョンを取得しますが、モデルにはいくつかの更新があった可能性があります。そのソフトウェアがインストールされているすべての異なるモデルを返すため、 Product.SoftwareVersion フィールドだけを検索することはできません。
したがって、最終的には、調べている製品の ModelId と Version が一致する SoftwareVersion からレコードを返す必要があります。
製品のプロパティとして 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」はモデルの外部キーの役割を果たし、SoftwareVersion の複合外部キーの一部として機能します。ただし、複数の ForeignKey 属性を同じプロパティに割り当てることはできません...
[ForeignKey("Model"),ForeignKey("SoftwareVersion")]
public Guid ModelID { get; set; }
public virtual ProductModelEntity Model { get; set; }
可能であれば属性を使用することを好みますが、他の手法も受け入れます。(属性は、ライブラリ全体に定義を広げるのではなく、関連するコードでクラスを直接記述します。定義を探すのに時間を費やすのではなく、見ているものを理解するのは良いことです...しかし、私は脱線します!)
いつものようにどんな支援も大歓迎です。
ありがとうございました
-G