0

このような2つのモデルがある場合:

public class PredictionGroup
{
    [Key]
    public Guid PredictionGroupId { get; set; }

    public Guid? ResultPredictionId { get; set; }

    [ForeignKey("ResultPredictionId")]
    public Prediction ResultPrediction { get; set; }

    public List<Prediction> Predictions { get; set; }
}

public class Prediction
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid PredictionId { get; set; }

    [Required]
    public Guid PredictionGroupId { get; set; }

    [ForeignKey("PredictionGroupId")]
    public PredictionGroup PredictionGroup { get; set; }
}

これが生成されます:

CreateTable(
    "Website.PredictionGroups",
    c => new
        {
            PredictionGroupId = c.Guid(nullable: false, identity: true),
            ResultPredictionId = c.Guid(),
        })
    .PrimaryKey(t => t.PredictionGroupId)
    .ForeignKey("Website.Predictions", t => t.ResultPredictionId)
    .Index(t => t.ResultPredictionId);

CreateTable(
    "Website.Predictions",
    c => new
        {
            PredictionId = c.Guid(nullable: false, identity: true),
            PredictionGroupId = c.Guid(nullable: false),
            PredictionGroup_PredictionGroupId = c.Guid(),
        })
    .PrimaryKey(t => t.PredictionId)
    .ForeignKey("Website.PredictionGroups", t => t.PredictionGroupId)
    .ForeignKey("Website.PredictionGroups", t => t.PredictionGroup_PredictionGroupId)
    .Index(t => t.PredictionGroupId)
    .Index(t => t.PredictionGroup_PredictionGroupId);

これをデータベースに入力しようとすると、次のエラーが表示されます。Unable to determine the principal end of the 'Site.Data.Prediction_PredictionGroup' relationship. Multiple added entities may have the same primary key.

誰かがこれに光を当てることができますか?

4

2 に答える 2

0

この Fluent API コードを追加しました。

        modelBuilder.Entity<PredictionGroup>()
            .HasOptional(m => m.ResultPrediction)
            .WithOptionalDependent()
            .Map(x => x.MapKey("PredictionResultGroupId"));

MapKeyオプションですが、注釈だけで実行できることを望んでいました。

于 2013-02-16T20:33:11.507 に答える
0

モデルが正しいかどうかわからないため、Fluent API コードを追加する必要がありました。これには Fluent API コードは必要ありません。[ForeignKey] 定義は、外部キー値であるプロパティに適用され、キーであるオブジェクトを指します。したがって、プロパティ属性は ResultPredictionId に続き、プロパティ ResultPrediction に対してそれを言います。現在、それは反対に行われています。

public class PredictionGroup
{
    [Key]
    public Guid PredictionGroupId { get; set; }

    [ForeignKey("ResultPrediction")] //this is the key, point it to the object
    public Guid? ResultPredictionId { get; set; }


    public Prediction ResultPrediction { get; set; }

    public List<Prediction> Predictions { get; set; }
}

public class Prediction
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid PredictionId { get; set; }

    [Required]
    [ForeignKey("PredictionGroup")]
    public Guid PredictionGroupId { get; set; }


    public PredictionGroup PredictionGroup { get; set; }
}
于 2013-02-17T18:15:53.957 に答える