我正在使用现有数据库,因此无法更改架构。以下是我正在使用的表格......
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&版本匹配我正在查找的产品。
我想将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”执行Model的外键角色,并作为SoftwareVersion的复合外键的一部分。但是,我无法将多个ForeignKey属性分配给同一属性...
[ForeignKey("Model"),ForeignKey("SoftwareVersion")]
public Guid ModelID { get; set; }
public virtual ProductModelEntity Model { get; set; }
如果可行,我更喜欢使用属性,但我也对其他技术持开放态度。 (属性直接在相关代码中描述类,而不是在库中传播定义。很高兴理解你在看什么,而不是花时间寻找定义......但我离题了!)
非常感谢任何帮助。
谢谢
-G
答案 0 :(得分: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; }
}