[英]EntityFramework Core SQLite with List<T> overriding current ID value instead of add next ID
我有模型:
public class TVProgram
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public List<Channel> Channels { get; set; }
}
public class Channel
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public int Created { get; set; }
}
当我将数据保存到数据库时,应该有很多电视频道连接到指定的 TVPrograms。
例如,我需要在频道“Discovery、Animal Pl.net、BBC”上有一个名为“Animals Life”的节目,但在数据库中它用最后添加的 ID 保存,例如:
ID | Name | TVProgramID
0 | AL | 4
0 | AL2 | 4
其中4是最后更新的 Program TV 的 id。
我期待类似的东西
ID | Name | TVProgramIDs
0 | AL | 1,2,3
0 | AL2 | 2,4,9
我使用的上下文如下:
using(var cnx = new MyContext())
{
var channel = cnx.Channels.Where(x => x.Name == "AL").FirstOrDefault();
var program = cnx.Programs.Where(x => x.Name == "Discovery").Include(x=>x.Channels).FirstOrDefault();
program.Channels.Add(channel);
program.SaveChanges();
}
如何解决?
您缺少 TVProgram 和 Channel 之间的“多对多”表。 在 EF 中,这是(或曾经是)自动的,但在 EF 核心中,您需要手动执行此操作。
public class TVProgram
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public List<TVProgramChannel> TVProgramChannels { get; set; }
}
public class Channel
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public int Created { get; set; }
public List<TVProgramChannel> TVProgramChannels { get; set; }
}
public class TVProgramChannel
{
public TVProgram TVProgram {get;set;}
public Channel Channel {get;set;}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.