C# 使用Dapper.Contrib InsertAsync在Id上具有ExplicitKey属性的类上返回0作为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执行不同的操

我希望Add()方法返回实际输入的Id,即客户对象中的Id。否则,我想返回整个对象。但我需要知道插入是否成功


是否有方法检查InsertAsync()Success=true???

这是因为您使用了
ExplicitKey
。从:

  • [ExplicitKey]-此属性表示数据库不会自动生成的显式标识/密钥
Contrib正在使用SCOPE_IDENTITY获取id,因此该列需要是一个IDENTITY列。“普通”插入不会返回任何内容,因此无法恢复Id。 根据SQL方言的不同,您可以对SQL执行不同的操作,但如果需要更改查询,则不会使用Dapper.Contrib

如果您使用了
标识
列,它应该是开箱即用的

编辑:
如果要检查成功,只需检查异常。如果插入失败,将引发异常。

我需要使用[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;
            }
        }