如何用 Entity Framework 解决 "Multiple object sets per type are not supported" 问题

How to solve the "Multiple object sets per type are not supported" problem with Entity Framework

我正在尝试先为我的 FHEM 数据库构建代码 dbcontext

这个数据库由两个 table currenthistory 组成,具有完全相同的架构。 SQL 创建命令是这样的:

CREATE TABLE current 
( 
     TIMESTAMP TIMESTAMP, 
     DEVICE varchar(64), 
     TYPE varchar(64), 
     EVENT varchar(512), 
     READING varchar(64), 
     VALUE varchar(128), 
     UNIT varchar(32)
)

CREATE TABLE history 
( 
     TIMESTAMP TIMESTAMP, 
     DEVICE varchar(64), 
     TYPE varchar(64), 
     EVENT varchar(512), 
     READING varchar(64), 
     VALUE varchar(128), 
     UNIT varchar(32)
)

所以 dbcontext 应该是这样的:

  public class FhemContext : DbContext
  {
        public virtual DbSet<LogEntries> History { get; set; }
        public virtual DbSet<LogEntries> Current{ get; set; }
  }

LogEntriesclass不太符合Entity Frameworktable的概念,但应该是这样的:

public class History
{
    public DateTime Timestamp { get; set; }
    public string DEVICE { get; set; }
    public string TYPE { get; set; }
    public string EVENT { get; set; }
    public string READING { get; set; }
    public string VALUE { get; set; }
    public string UNIT { get; set; }
}

为了适应模式,我想我必须添加一个 属性 `currentId' 或 'historyId' 类型为 int.

但这是另一个问题。

我必须如何声明 class FhemContext 才能满足 Entity Framework 限制并符合 FHEM 的原始数据库模式?

问候沃尔夫冈

这是我现在可以使用的代码:

public class LogEntry
{
    [Key]
    public DateTime Timestamp { get; set; }
    public string DEVICE { get; set; }
    public string TYPE { get; set; }
    public string EVENT { get; set; }
    public string READING { get; set; }
    public string VALUE { get; set; }
    public string UNIT { get; set; }
}

public class Current : LogEntry
{
}

public class History : LogEntry
{
}

public class FhemContext : DbContext
{
    public virtual DbSet<History> History { get; set; }
    public virtual DbSet<Current> Current{ get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var db = new FhemContext();
        Console.WriteLine(db.Current.Count());
        Console.WriteLine(db.History.Count());

        History historyentry = new History { Timestamp = DateTime.Now };
        db.History.Add(historyentry);
        db.SaveChanges();

        Current currentEntry = new Current{ Timestamp = DateTime.Now };
        db.Current.Add(currentEntry);
        db.SaveChanges();
    }
}

这会有帮助吗?

public class FhemContext : DbContext
{
    public virtual DbSet<History> History { get; set; }
    public virtual DbSet<Current> Current{ get; set; }
}

public class LogEntry
{
    public DateTime Timestamp { get; set; }
    public string DEVICE { get; set; }
    public string TYPE { get; set; }
    public string EVENT { get; set; }
    public string READING { get; set; }
    public string VALUE { get; set; }
    public string UNIT { get; set; }
}

public class Current : LogEntry
{
}

public class History : LogEntry
{
}

并将类型 History 映射到 table 历史等等。