Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架-外键中可能使用部分复合主键_C#_Entity Framework_Entity Framework 5 - Fatal编程技术网

C# 实体框架-外键中可能使用部分复合主键

C# 实体框架-外键中可能使用部分复合主键,c#,entity-framework,entity-framework-5,C#,Entity Framework,Entity Framework 5,我试图将EntityFramework5与一个遗留数据库相适应,其中两个表都定义了一个复合主键 Product(ProductId, VersionId, Name, StrengthId) <- ProductId and VersionId form the PK Strength(StrengthId, VersionId, Description) <- StrengthId and VersionId form the PK 生成以下创建表脚本片段: CREATE TAB

我试图将EntityFramework5与一个遗留数据库相适应,其中两个表都定义了一个复合主键

Product(ProductId, VersionId, Name, StrengthId) <- ProductId and VersionId form the PK
Strength(StrengthId, VersionId, Description) <- StrengthId and VersionId form the PK
生成以下创建表脚本片段:

CREATE TABLE IF NOT EXISTS t_LIVE_Product (
  iD INTEGER NOT NULL,
  VersionId INTEGER NOT NULL,
  sName text NULL,
  iStrengthID INTEGER NOT NULL,
  iVersionID INTEGER NOT NULL,
  PRIMARY KEY (iD, VersionId),
  FOREIGN KEY (iStrengthID, iVersionID) REFERENCES t_LIVE_Strength (iStrengthID, iVersionID) ON DELETE CASCADE
);

-- Index for foreign key FK_Product_Strength
CREATE INDEX IX_FK_Product_Strength ON t_LIVE_Product (iStrengthID, iVersionID);

CREATE TABLE IF NOT EXISTS t_LIVE_Strength ( 
  iStrengthID INTEGER NOT NULL,
  iVersionID INTEGER NOT NULL,
  sStrengthText text NULL,
  PRIMARY KEY (iStrengthID, iVersionID)
);
产品表为VersionId(VersionId和iVersionID)创建了两列,这不是我想要的。如果取消注释ProductConfiguration中的最后一行,则会出现以下错误:

错误0019:类型中的每个属性名称必须是唯一的。已定义属性名称“iVersionID”

这是有道理的,但没有让我更接近解决我的问题


我想做的是可能的吗?或者有人知道尝试将此模式融入EF的任何解决方法吗?

我不确定,但您可以尝试一下

public ProductConfiguraton()
{
    ToTable("t_Product");
    HasKey(p => new { p.Id, p.VersionId });

    HasRequired(p => new {p.VersionId, p.StrengthId})
        .WithMany(b => new {b.VersionId, b.Id})
        .HasForeignKey(p => p.VersionIdStrengthId);

    Property(p => p.Id).HasColumnName("iProductId");
    Property(p => p.VersionId).HasColumnName("iVersionID");
    Property(p => p.Name).HasColumnName("sName");
    Property(p => p.StrengthId).HasColumnName("iStrengthId");

}
更新

或者试试这个:

    HasRequired(p => new {p.VersionId, p.StrengthId})
        .WithMany()
        .HasForeignKey(b => new {b.VersionId, b.Id});

您在外键中创建的VersionIdStrengthId是什么?这不会尝试为此键创建一个新列吗?我不确定。你可以试试我建议的两个。太好了,第二个成功了,谢谢!当你知道怎么做的时候就简单了。
    HasRequired(p => new {p.VersionId, p.StrengthId})
        .WithMany()
        .HasForeignKey(b => new {b.VersionId, b.Id});