0

次の2つのクラスがあります。

public class Person
{
    public int Id { get; set; }
    public string FullName { get; set; }
}


public class Trip
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual IEnumerable<Person> Persons { get; set; }
}

ご覧のとおり、旅行には 1 人以上の人物を含めることができます...

EntityConfiguration を使用してデータベースを適切に構築しようとしましたが、それを機能させることができません...その使用法についてかなり混乱しています:

public class TripConfiguration : EntityTypeConfiguration<Trip>
{
    internal TripConfiguration()
    {
        // ???

    }
}

アプリケーションを適切に動作させるには、何を書く必要がありますか:

  1. 少なくとも1人必要です。
  2. 私は一人以上の人を持っているかもしれません
  3. 同じ旅行に 2 回参加することはできません
  4. 1 人が複数の旅行に参加できる
4

2 に答える 2

1

これを試して:

        this.HasRequired(x => x.Person)
            .WithMany(x => x.Trips)
            .HasForeignKey(x => x.PersonId);

あなたのクラス:

public class Person
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public virtual ICollection<Trip> Trips { get; set;}
}


public class Trip
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int PersonId { get; set; }
    public virtual Person Person { get; set; }
}

私が知る限り、EF は一意の FK をサポートしていません (または、間違っている場合は修正してください..)。したがって、自分で確認する必要があります。

于 2013-10-30T15:08:24.287 に答える
0

これは 1 対多の関係ではなく、多対多の関係です。関係の両側にコレクションが必要です。EF は、ユーザーに代わってジョイナー テーブルを作成します。EF は構成を通じて一意のキー制約をまだサポートしていないため、これが確実に行われるようにするには、ジョイナー テーブルに一意の制約を作成する必要があります。

public class Person
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public virtual ICollection<Trip> Trips { get; set; }
}


public class Trip
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Person> Persons { get; set; }
}

それから

class PersonConfiguration : EntityTypeConfiguration<Person>
{
    public PersonConfiguration()
    {
         this.HasMany(t => t.Trips).WithMany(t => t.Persons);
    }
}
于 2013-10-30T15:19:03.317 に答える