我正在尝试首先为我的FHEM数据库构建代码dbcontext
。
此数据库由两个具有完全相同模式的表current
和history
组成。 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; }
}
LogEntries
类不太适合实体框架表的概念,但是应该像这样:
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; }
}
为了适应模式,我认为我必须添加类型为int的属性'currentId'或'historyId'。
但这是另一个问题。
我如何声明类FhemContext
以满足实体框架的限制,并且还符合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
{
}
然后将历史记录类型映射到表历史记录,等等。>