NPOCO保存不仅适用于特定型号

时间:2017-11-14 15:56:54

标签: c# npoco

我有一种使用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; }
}

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

更新 无论出于何种原因,似乎NPOCO未映射LoginName。我得出这样的结论:

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

    “对象类型&lt;&gt; f__AnonymousType42`1 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]不存在已知托管提供程序本机类型的映射。“

  2. 使用Insert方法代替Save。当我这样做时,我得到错误:

    “无法将值NULL插入列'LoginName',表'TableName';列不允许空值.INSERT失败。\ r \ n语句已终止。”

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

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

1 个答案:

答案 0 :(得分:1)

尝试将主键定义更改为

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

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