【发布时间】:2020-06-29 08:56:47
【问题描述】:
我不是数据库和 SQL 方面的专家。我正在使用实体框架开发一个 dotnet 核心应用程序来访问(postgresql)数据库。 我有以下表格,其中包含以下列:
Table: Log
Columns:
Timestamp: timestamp without time zone
Value: smallint
Status: smallint
Table: Status
ID: smallint
Name: character varying(30)
当我在 Log 表中插入一条记录/行时,我想在 Status 表中查找属于 Name 的 ID,并在 Log 表的 Status 列中填写值。如果找不到名称,我想在状态列中插入 -1。 我已将其实现为:
Status status = null;
try {
status = context.Status.Single(a => a.Name == statusName);
} catch {}
var entry = new Log {
Timestamp = timestamp,
Value = value,
Status = (status != null) ? status.Id : Convert.ToInt16(-1)
};
context.Log.Add(entry);
context.SaveChanges();
这行得通。我认为它可以更有效地实施。我相信这个实现也存在一些问题。例如,当我临时停止数据库时,状态 id 的查询将失败,并执行带有 -1 的插入。重新启动数据库时,仍会执行插入(我认为实体框架会兑现操作),但使用的是 -1 而不是正确的值。当插入可以作为单个语句执行时,我期望/希望插入正确的值。 因此,我想知道一些事情。这些是我的实际问题:
- 如何使用 SQL 语句(在数据库管理工具上)实现此目的?
- 如何使用实体框架实现它,以便在数据库上执行单个 SQL 语句(从而在数据库临时关闭时插入正确的数据)?
【问题讨论】:
-
这通常通过在数据库中创建一个存储过程来完成工作,然后调用该存储过程来实现
标签: sql .net postgresql .net-core entity-framework-core