【发布时间】:2019-07-24 13:46:16
【问题描述】:
当我想在我的数据库中插入一个对象时,我收到一个错误:
对象引用未设置为对象的实例
当对象的主键字段是null 时。当我为该字段设置一些值时,它工作正常。
我的表创建:
create table Appointment
(
AppointmentUUID uuid DEFAULT uuid_generate_v4 () primary key,
};
我的班级:
public class Appointment
{
public Guid? AppointmentUUID { get; set; }
public void Insert(NpgsqlConnection conn)
{
var i = conn.Insert(this);
}
}
我的电话号码:
var lConnection = new NpgsqlConnection(connstring);
lConnection.Open();
var a = Appointment.Get2(allAppoints.FirstOrDefault().AppointmentUUID.Value, lConnection);
var newApp = new Appointment();
newApp.Insert(lConnection);
肯定有一种方法可以插入一个对象并让数据库创建它自己的Guid。我错过了什么?
【问题讨论】:
-
为什么要服务器生成呢?为什么不用 C# 生成它?
-
github.com/ericdc1/Dapper.SimpleCRUD 提到
Insert<Guid,T>(entity) - Inserts a record and returns the new guid primary key你试过吗? -
@mjwills 我的印象是,如果 Db 自己创建 PK,性能会更好?此外,感觉 PK 生成超出了 DAL 的范围;这是 Db 本身关心的问题
-
@RobertMcKee 我怀疑 generation 是问题 - 更多的问题是数据库是否以某种方式生成 GUID 以提高索引的性能等。
-
我将提倡在数据库中生成 PK,无论是串行还是 UUID,因为我认为不将其移动到客户端有一些很好的理由。在数据库上,无论行如何创建,适当的类型都是如此。无论该行是由应用程序生成的,还是由后来的应用程序生成的(并且数据结构化往往比应用程序寿命更长),或者是直接在数据库上快速修复的应用程序,都是如此。对于性能,客户端生成 UUID 需要多长时间。至于任何一种方式都相同的索引,总是在 DB 和选择的类型中。只是MHO
标签: c# postgresql dapper dapper-extensions