NPOCO Save 仅适用于特定型号

NPOCO Save not working only for specific model

我有一个使用 NPOCO 保存的方法,除了一个模型外,它工作正常。

public bool Upsert<T>(T record, string message)
        {
            try
            {
                using (var db = new Database(GetConnStr(), DatabaseType.SqlServer2008))
                {
                    db.Save(record);
                    return true;
                }
            }
            catch (Exception x)
            {
                //log exception
                return false;
            }
        }

此代码有效,我正在使用多个模型。但是对于以下模型,它不会保存也不会抛出任何错误:

[PrimaryKey("LoginName")]
public class TableName
{
    public string LoginName { get; set; }
    public string RealName { get; set; }
    public string Tag { get; set; }
}

我已经调试并单步执行代码并确认模型包含数据,保存方法被命中并且没有抛出异常。我已将模型名称更改为错误的值并得到正确的错误 invalid object name。但是,当我将其改回正确的名称时,数据不会保存并且不会引发任何错误。我已经使用 management studio 手动将相同的记录插入到数据库中而没有错误(只是为了确保没有隐藏的数据库错误)。

更新: 无论出于何种原因,NPOCO 似乎都没有映射 LoginName。我通过以下方式得出了这个结论:

  1. 使用 NPOCO SingleById 会引发以下错误:

    "No mapping exists from object type <>f__AnonymousType42`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] to a known managed provider native type."

  2. 使用了 Insert 方法而不是 Save。当我这样做时,出现错误:

    "Cannot insert the value NULL into column 'LoginName', table 'TableName'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."

即使模型具有所有值,当我通过调试器检查它时

我怀疑 save 不会抛出错误,因为它是 upsert.

尝试将您的主键定义更改为

[PrimaryKey("LoginName", AutoIncrement=false)]

由于LoginName不是自增字段,所以无法添加记录。 AutoIncrement 的默认值为 True。