使用具有由两个外键定义的一对多关系的实体框架



我正在使用一个现有的数据库,所以更改模式不是一个选项。这是我正在处理的桌子。。。

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

每个单独的产品都安装了软件。我们有几个产品型号,每个产品显然都与一个型号(产品[FK1])相关。

在每个产品型号的生命周期中,它可能有几个软件更新/版本。同样,软件可能安装在许多型号上。

我需要能够获取ProductID并返回安装在该特定产品上的软件版本。通常情况下,我会获得与我正在查找的产品的型号相关的软件版本,但该型号可能有几次更新。我无法单独在Product.SoftwareVersion字段中查找,因为这将返回安装该软件的所有不同型号。

所以最终我需要从SoftwareVersion返回记录,其中ModelId&版本与我正在查找的产品相匹配。

我想将软件版本作为产品的属性返回。。。

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"执行Model的外键角色,并作为SoftwareVersion的复合外键的一部分。但是,我无法将多个ForeignKey属性分配给同一属性。。。

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

如果可能的话,我更喜欢使用属性,但也对其他技术持开放态度。(属性直接在相关代码中描述类,而不是在库中传播定义。理解你在看什么,而不是花时间寻找定义,这很好……但我跑题了!)

如有任何协助,我们将不胜感激。

谢谢

-G

我认为以下注释两者都能起作用:

[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; }
}

相关内容

  • 没有找到相关文章

最新更新