1

同じ親テーブル Edge.StartStationId と Edge.EndStationId への 2 つの外部キーを持つテーブルがあります。

これらをエンティティ フレームワークのオブジェクトにマップしようとしていますが、問題を解決するような回避策が見つかりません。親 (ステーション) で 2 つのコレクションを使用するいくつかのソリューションを見つけましたが、これには興味がありません。

ステーション (親) クラス:

public partial class Station
{
    public Station()
    {
        this.Reservations = new List<Reservation>();
        this.StationMaintenances = new List<StationMaintenance>();
    }

    public int ID { get; set; } 
    public int TypeId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public decimal StationLat { get; set; }
    public decimal StationLong { get; set; }
    public bool IsOperational { get; set; }
    public bool IsActive { get; set; }
    public DateTime CreatedDate { get; set; }
    public virtual BatteryStorage BatteryStorages { get; set; }
    public virtual List<Reservation> Reservations { get; set; }
    public virtual List<StationMaintenance> StationMaintenances { get; set; }
    public virtual List<Edge> Edges { get; set; }
    public virtual StationType StationType { get; set; }
}

エッジ (子) クラス:

public partial class Edge
{
    public int ID { get; set; }
    public int StartStationId { get; set; }
    public virtual Station StartStation { get; set; }
    public int EndStationId { get; set; }
    public virtual Station EndStation { get; set; }
    public decimal Distance { get; set; }
    public decimal Time { get; set; }
    public bool IsActive { get; set; }
}

OnModelCreating に追加されたエッジ マップ クラス。

public EdgeMap()
{
    // Primary Key
    this.HasKey(t => t.ID);

    // Properties
    // Table & Column Mappings
    this.ToTable("Edges");
    this.Property(t => t.ID).HasColumnName("ID");
    this.Property(t => t.StartStationId).HasColumnName("StartStationId");
    this.Property(t => t.EndStationId).HasColumnName("EndStationId");
    this.Property(t => t.Distance).HasColumnName("Distance");
    this.Property(t => t.Time).HasColumnName("Time");
    this.Property(t => t.IsActive).HasColumnName("IsActive");

    // Relationships
    //this.HasOptional(t => t.StartStation)
    //    .WithMany(t => t.Edges)
    //    .HasForeignKey(d => d.StarStationId);
    //this.HasOptional(t => t.EndStation)
    //    .WithMany(t => t.Edges)
    //    .HasForeignKey(d => d.EndStationId);
}

例外:

モデルの生成中に 1 つ以上の検証エラーが検出されました: System.Data.Entity.Edm.EdmAssociationType: : 多重度は、関係 'Edge_EndStation' のロール 'Edge_EndStation_Target' の参照制約と競合します。従属ロールのすべてのプロパティは null 非許容であるため、プリンシパル ロールの多重度は '1' でなければなりません。

4

1 に答える 1

1

あなたが投稿した特定のエラーは、HasOptional. 外部キー (StartStationIdおよびEndStationId) は null 非許容であるため、必要なマッピングが必要です。に変更するか、とHasRequiredのタイプを に変更して、ナビゲーション プロパティが null になる可能性があることを認識できるようにします。StartStationIdEndStationIdint?

コレクションに関してはEdges、何を含める必要がありますか? または値でEdgeを参照するものはStationありますか? もしそうなら、単一のコレクションでそれを行うことはできないと思います。StartStationIdEndStationId

于 2013-05-15T14:29:12.947 に答える