4

Person が多くのお気に入りの映画を持つことができるコード ファースト モデルを作成しようとしていますが、映画テーブルに FK は必要ありません。

これを達成する唯一の方法は、2 つのエンティティ間にリンク テーブルを作成するように EF を取得することです。これを行うには (afaik)、Person に関連する Movies エンティティにコレクション プロパティを作成しました...

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual IList<Movie> FavouriteMovies { get; set; }
}

public class Movie
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual IList<Person> People { get; set; } // I don't want this here :(
}

ムービーはこんな感じにしたい…

public class Movie
{
    public int Id { get; set; }
    public string Name { get; set; }
}

ただし、その際、EF はリンク テーブルを作成せず、Movies テーブルの Person_Id FK 列を叩くだけです。

映画は人々とは何の関係もないはずなので、私はこれが起こることを望んでいません。

では、どうやってケーキを食べて食べるのですか?

4

1 に答える 1

1

そうすべき。エンティティをどのように追加しますか?サンプルは次のとおりです。

public class Character : BaseEntity
{
    public string Name { get; set; }
    public bool IsEvil { get; set; }
    public virtual ICollection<Videogame> Videogames { get; set; } 
}
public class Videogame : BaseEntity 
{
    public string Name { get; set; }
    public DateTime ReleasedDate { get; set; }
    public virtual ICollection<Character> Characters { get; set; }
    public Author Author { get; set; }
}

ここにレコードが追加されます:

[Test]
public void CreateJoinTable()
{
    var character = new Character() {Name = "Wario", IsEvil = true};
    var videogame = new Videogame() {Name = "Super Mario Bros 20", ReleasedDate = DateTime.Now , Characters = new Collection<Character>()};
    videogame.Characters.Add(character);
    var context = new NerdContext();
    context.Add(videogame);
    context.SaveAllChanges();
}

スニペットの出所は次のとおりです:http://george2giga.com/2012/05/02/easy-join-tables-with-ef-code-first/

于 2012-06-07T15:33:08.497 に答える