c# – EF Code-First:具有单向导航的多对多

我正在尝试创建一个代码优先模型,其中一个人可以有很多喜欢的电影,但我不想在电影表中使用FK.

实现这一目标的唯一方法是让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列.

我不希望这种情况发生,因为电影不应该与人有任何关系,我可能想把它与其他东西联系起来.

那我怎么吃蛋糕吃呢?

解决方法

这应该.你如何添加你的实体?
这是一个示例:

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/

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...