2

Entity Framework Code Firstを使用して asp.net mvc ソリューションを開発しましたが、次のエラーが発生しました。

Introducing FOREIGN KEY constraint 'FK_dbo.Transports_dbo.Shippers_ReceiverId' on table 'Transports' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

これは、データベースの作成プロセスでソリューションを開始したときに発生しました。

ここに私のモデルがあります:

public class Transport
{
    [Key]
    public int Id { get; set; }
    ...
    public int SenderId { get; set; }
    public int ReceiverId { get; set; }
    ...
    public virtual Shipper Sender { get; set; }
    public virtual Shipper Receiver { get; set; }
}

public class Shipper
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Street { get; set; }
    public string Number { get; set; }
}

コメントするpublic virtual Shipper Receiver { get; set; }とうまくいくので、これは循環的な問題です。

誰でもこの問題について私を助けることができますか?

4

1 に答える 1

2

より複雑な 'self-bound' または 'multiple to same' 関係については、関係を明示的に定義する必要があります - 流暢な構成を使用するのが最適です。

例えば

modelBuilder.Entity<Transport>()
    .HasRequired(at => at.Sender)
    .WithMany(a => a.TransportsAsSender)
    // .HasForeignKey(at => at.SenderId)
    .WillCascadeOnDelete(false);

modelBuilder.Entity<Transport>()
    .HasRequired(at => at.Receiver)
    .WithMany(a => a.TransportsAsReceiver)
    // .HasForeignKey(at => at.ReceiverId)
    .WillCascadeOnDelete(false);

...以下も追加することを前提としています。

public ICollection<Transport> TransportsAsSender { get; set; }
public ICollection<Transport> TransportsAsReceiver { get; set; }

...へShipper

それともそのまま使う...

.WithMany() // and no collection navigation properties
于 2013-04-01T19:42:25.367 に答える