【问题标题】:Subsonic 3 - Update NullReferenceExceptionSubsonic 3 - 更新 NullReferenceException
【发布时间】:2009-07-24 15:25:22
【问题描述】:

我正在使用带有 Linq 模板的 Subsonic v3.0.0.3。我正在尝试使用以下内容更新 SQL Server Express 数据库中的记录:

var db = new MyDB(Constants.Database);
db.Update<Contact>()
  .Set(d => d.FirstName == contact.FirstName)
  .Where(d => d.Id == contact.Id)
  .Execute();

执行此行时,我收到NullReferenceException。堆栈跟踪如下:

   at SubSonic.Query.Update.GetCommand()
   at SubSonic.Query.Update.Execute()

是否有人能够提出问题所在?

【问题讨论】:

    标签: subsonic subsonic3


    【解决方案1】:

    嗯 - 我会说要确保连接字符串存在(我将在接下来的几周内修复丢失连接字符串的错误消息)除此之外 - 这看起来像一个问题 - 你介意在 Github 上发帖吗?

    【讨论】:

    • 如果连接字符串为空,它应该会抛出一个有意义的错误:github.com/subsonic/SubSonic-3.0/blob/…
    • 这似乎不是连接字符串问题 - 因为我使用类似的约定从数据库中获取数据。我一定会把它提交到 github 上。
    • 谢谢 - 我收到了一些错误的代码贡献,我需要更仔细地观察 - 我还需要更多测试 :)
    【解决方案2】:

    我做了一个简单的更新,它给了我一个 NullReferenceException

    FarmDB db = new FarmDB();
    db.Update<UserInfo>().Set(x => x.phone == "13679178184").Where(x => x.name == "marship").Execute();
    

    进入代码后,我在 Query/update.cs L186 中找到了这一行

    internal Setting CreateSetting(IColumn column, bool isExpression)
    {
        Setting s = new Setting
        {
            query = this,
            ColumnName = column.Name,
            ParameterName = (_provider.ParameterPrefix + "up_" + column.Name),
            IsExpression = isExpression,
            DataType = column.DataType
        };
        ...
    

    ColumnName = column.QualifiedName 应该是ColumnName = column.Name

    更正此问题后,更新运行良好。希望有人可以检查一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      相关资源
      最近更新 更多