在研究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; }
}
答案 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 - 存储库更新再次运行!