gpt4 book ai didi

c# - EF 代码优先 : Many-to-many with one direction navigation

转载 作者:行者123 更新时间:2023-11-30 12:49:43 25 4
gpt4 key购买 nike

我正在尝试创建一个代码优先模型,其中一个人可以拥有许多最喜欢的电影,但我不希望电影表中有 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 :(
}

我希望 Movie 看起来像这样......

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/

关于c# - EF 代码优先 : Many-to-many with one direction navigation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10934901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com