C# 使用Dapper.Contrib InsertAsync在Id上具有ExplicitKey属性的类上返回0作为Id
我希望Add()方法返回实际输入的Id,即客户对象中的Id。否则,我想返回整个对象。但我需要知道插入是否成功C# 使用Dapper.Contrib InsertAsync在Id上具有ExplicitKey属性的类上返回0作为Id,c#,.net,insert,dapper,C#,.net,Insert,Dapper,我希望Add()方法返回实际输入的Id,即客户对象中的Id。否则,我想返回整个对象。但我需要知道插入是否成功 是否有方法检查InsertAsync()Success=true???这是因为您使用了ExplicitKey。从: [ExplicitKey]-此属性表示数据库不会自动生成的显式标识/密钥 Contrib正在使用SCOPE_IDENTITY获取id,因此该列需要是一个IDENTITY列。“普通”插入不会返回任何内容,因此无法恢复Id。 根据SQL方言的不同,您可以对SQL执行不同的操
是否有方法检查InsertAsync()Success=true???这是因为您使用了
ExplicitKey
。从:
- [ExplicitKey]-此属性表示数据库不会自动生成的显式标识/密钥
键
和标识
列,它应该是开箱即用的
编辑:
如果要检查成功,只需检查异常。如果插入失败,将引发异常。我需要使用[ExplicitKey],因为我正在传递自己的身份。如果我使用[Key]它抛出错误“不能为Id插入NULL值”对不起,我没有解释清楚。我想表达的是,你想要的是不可能的。插入没有返回任何内容。如果您使用IDENTITY Dapper.Contrib,它将为您选择SCOPE_IDENTITY,但这只是一个极端情况。不管怎样,您已经有了ID,因为您自己传递了它。是的,正确的,我已经有了ID。我主要是希望该方法返回除0以外的内容,以实际确认它已成功。现在,我只需要在使用范围之外返回一个bool值设置结果,并使用tryCach返回结果成功与否。如果您决定返回到Dapper(旁路Contrib),可能会有所帮助。这是在MS Access的上下文中,但基本原理仍然是一样的。
public class Customer
{
[ExplicitKey]
public int Id { get; set; }
[Write(false)]
public string FullName { get; set; }
public string Username { get; set; }
public string Email { get; set; }
public string EmailToRevalidate { get; set; }
public string SystemName { get; set; }
public int BillingAddress_Id { get; set; }
..................
..................
public int Add(Customer customer)
{
using (IDbConnection conn = Connection)
{
var result = conn.InsertAsync(customer).Result; // need to fix this it is return 0 because of the explicitkey attribue on ID.
return result;
}
}