0

既存のデータベースを使用しているため、スキーマを変更することはできません。これが私が使用しているテーブルです...

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

4

1 に答える 1

0

次の注釈は両方とも機能すると思います。

[Table("Product")]
public class ProductEntity
{
    public Guid ModelID { get; set; }
    public String SoftwareVersionNumber { get; set; }

    [ForeignKey("ModelID, SoftwareVersionNumber")]
    public virtual ProductModelEntity Model { get; set; }

    [ForeignKey("SoftwareVersionNumber")]
    public virtual SoftwareVersionEntity SoftwareVersion { get; set; }
}

または:

[Table("Product")]
public class ProductEntity
{
    [ForeignKey("Model"), Column(Order = 1)]
    public Guid ModelID { get; set; }

    [ForeignKey("Model"), ForeignKey("SoftwareVersion"), Column(Order = 2)]
    public String SoftwareVersionNumber { get; set; }

    public virtual ProductModelEntity Model { get; set; }
    public virtual SoftwareVersionEntity SoftwareVersion { get; set; }
}
于 2012-07-12T18:47:07.750 に答える