0

I am testing subsonic 3, i can query my database but when i am inserting a record i have an exception. Here is my code:

Client lClient = new Client(); lClient.Name = "Peter"; lClient.FullName = "Richards"; lCliente.Save();

And i have a null reference exception on this generated code:

var newKey=_repo.Add(this,provider);

Any help is appreciated.

I am using ActiveRecords

4

4 回答 4

1

我遇到了类似的问题,代码与以下内容不同:

var pending = myTable.SingleOrDefault(x => x.Id == 1);
if (pending == null)
    pending = new myTable();

pending.Id = 1;
pending.MyDate = DateTime.Now;
pending.MyString = someString;
pending.Save();

这在我第一次在空桌子上运行时有效,但在第二次更新时无效。我在亚音速存储库中的某处遇到了空引用异常。正如 Rob 建议的那样,解决方案是添加一个主键。

只是想我会提到它(感谢 Rob)。

于 2009-11-10T09:10:04.800 回答
0

空引用异常实际发生在哪里?是否为_repo空?

尝试并仔细检查“客户”表中没有任何不可为空的列,并且您没有设置任何值。

还要确保正确处理您的 PK(检查您是否具有该[Property.IsForeignKey=true;]属性)

于 2009-07-21T16:14:32.300 回答
0

你的表有 PrimaryKey 吗?听起来不像。如果不是 - 这是你的问题。

于 2009-08-21T19:01:17.423 回答
0

您是否在(文件菜单)调试 -> 异常中检查了 NullReferenceException(按查找并键入 NullReferenceException,然后按确定)?

我下载了 SubSonic 代码并将其用作我的项目的参考,在SubSonic.Core\Repository\SubSonicRepository.cs:209中引发了异常,因为在第 208 行未检查prop是否为,并且任何异常都被吞下,如 line 所示213.

发生的情况是,Visual Studio 中断了在上述对话框中检查的所有异常。所以在某种程度上,这是代码的预期行为。

实际导致 prop 变为 null 的原因,在我的情况下,表字段名称是小写的,但该属性实际上是正确大小写的。

立即

tbl.PrimaryKey.Name
"playerinformationid"

item.GetType().GetProperties()  
{System.Reflection.PropertyInfo[11]}  
    [0]: {System.Collections.Generic.IList`1[SubSonic.Schema.IColumn] Columns}  
    // *snip*  
    [5]: {Int32 PlayerInformationid}
    // *snip*

item.GetType().GetProperty("PlayerInformationid")
{Int32 PlayerInformationid} // Works!

item.GetType().GetProperty(tbl.PrimaryKey.Name)
null

我把它一起破解以“让它工作”(警告:新手在 3.5 东西)

-var prop = item.GetType().GetProperty(tbl.PrimaryKey.Name);
+var lowerCasedPrimaryKeyName = tbl.PrimaryKey.Name.ToLowerInvariant();
+var prop = item.GetType().GetProperties().First<System.Reflection.PropertyInfo>(x => x.Name.ToLowerInvariant() == lowerCasedPrimaryKeyName);
于 2009-08-21T16:16:54.947 回答