简体   繁体   English

EntityFramework 核心 SQLite 与列表<t>覆盖当前 ID 值而不是添加下一个 ID</t>

[英]EntityFramework Core SQLite with List<T> overriding current ID value instead of add next ID

I have Models:我有模型:

  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; }
    }

When i saved data to database it should be a lot of TV Channels connected to specify TVPrograms.当我将数据保存到数据库时,应该有很多电视频道连接到指定的 TVPrograms。

For example i need to have program named "Animals Life" on Channels "Discovery, Animal Pl.net, BBC", but in database its saved with last added id, for example:例如,我需要在频道“Discovery、Animal Pl.net、BBC”上有一个名为“Animals Life”的节目,但在数据库中它用最后添加的 ID 保存,例如:

ID   |  Name  |  TVProgramID
0    | AL     |      4    
0    | AL2    |      4    

Where 4 is id of last updated Program TV.其中4是最后更新的 Program TV 的 id。

I expect something like我期待类似的东西

ID   |  Name  |  TVProgramIDs
0    | AL     |      1,2,3    
0    | AL2    |      2,4,9    

Im using context like:我使用的上下文如下:

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();
}

How to fix that?如何解决?

You are missing a 'many to many' table between TVProgram and Channel.您缺少 TVProgram 和 Channel 之间的“多对多”表。 In EF this is (or used to be) automatic, but in EF core you need to do this manually.在 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