【问题标题】:EntityFramework Core SQLite with List<T> overriding current ID value instead of add next IDEntityFramework Core SQLite 与 List<T> 覆盖当前 ID 值而不是添加下一个 ID
【发布时间】:2020-07-17 10:29:47
【问题描述】:

我有模特:

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

当我将数据保存到数据库时,应该有很多电视频道连接到指定的电视节目。

例如,我需要在频道“Discovery、Animal Planet、BBC”上创建名为“Animals Life”的节目,但在数据库中将其保存为最后添加的 id,例如:

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

其中 4 是上次更新的电视节目的 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();
}

如何解决?

【问题讨论】:

    标签: c# .net entity-framework entity-framework-core


    【解决方案1】:

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

    【讨论】:

    • 然后是 DBSet 而不是 DbSet 和 DbSet
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2018-02-23
    • 2020-07-29
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多