簡體   English   中英

EntityFramework 核心 SQLite 與列表<t>覆蓋當前 ID 值而不是添加下一個 ID</t>

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM