SubSonic SimpleRepository更新导致空引用异常

时间:2009-09-01 06:35:34

标签: subsonic

在研究SubSonic的新SimpleRepository时,我发现调用 Update()方法总是抛出 NullReferenceException 。在3.0.0.3版本中包含的示例MVC下载中甚至都是如此。

有谁知道是否有办法让更新成功?

这是一个例子。 if语句有效;它添加表并创建记录。第二次运行此代码流到else块,更新抛出异常。

var repo = new SimpleRepository("c", SimpleRepositoryOptions.RunMigrations);

var user = repo.Single<User>(u => u.Email == "a@b.com");

if (user == null)
{
    repo.Add(new User { Email = "a@b.com", Name = "Test" });
}
else
{
    user.Name = DateTime.Now.ToString();
    repo.Update(user);
}

public class User
{
    public int Key { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

2 个答案:

答案 0 :(得分:3)

我想我发现了这个问题。在SubSonic源中,Update例程中存在一个小缺陷,它在查询更新查询对象中的表列表中查找列名。 Linq查询需要使用列的QualifiedName属性,而不是Name属性。查询设置(查询的右侧)使用完全限定名称。

我冒昧地在SubSonic的GitHub网站上提交了一个问题:)

对于那些感兴趣的人,问题出在Update.cs(在Query文件夹中),第229行。

改变这个......

var col= table.Columns.SingleOrDefault(
  x => x.Name.Equals(s.ColumnName, StringComparison.InvariantCultureIgnoreCase)
);

到此......

var col = table.Columns.SingleOrDefault(
  x => x.QualifiedName.Equals(
    s.ColumnName, StringComparison.InvariantCultureIgnoreCase
  )
);

重建,你很高兴。

答案 1 :(得分:0)

我也遇到了这个问题,我能够下载最新的SubSonic源代码,问题已经修复。只需打开SubSonic.Core项目并进行构建并替换项目对SubSonic.Core的引用。

下载最新资讯 http://github.com/subsonic/SubSonic-3.0

Boom - 存储库更新再次运行!