[英]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.