2009-07-24 8 views
1

私はLinokテンプレートでSubsonic v3.0.0.3を使用しています。私は、次のとSQL Server Expressデータベースのレコードを更新しようとしています:サブソニック3 - 更新NullReferenceException

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() 

誰かが問題の原因を示唆することがありますか?

答えて

1

Hmm - 接続文字列が存在することを確認するとします(今後数週間で接続文字列が見つからないというエラーメッセージを修正します)。これは問題のように見えます。ギター?

+0

接続文字列がnullの場合は意味のあるエラーをスローする必要があります。http://github.com/subsonic/SubSonic-3.0/blob/d258f4793f0fffae3cf0fa707fddbeb7f56b277c/SubSonic.Core/DataProviders/ProviderFactory.cs#L31 –

+0

それはないようです接続文字列の問題です - 私は同様の規則を使用してデータベースからデータを取得しています。私は確かにそれをギブスで過ごします。 –

+0

ありがとうございます - 私はより密接に見る必要があるいくつかのバギーコードの貢献を得ています - また私はいくつかのより多くのテストが必要です:) –

1

私はコードにステップした後、私にとNullReferenceException

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

を与える簡単な更新をしなかった、私は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 
    }; 
    ... 

update.cs ColumnName = column.QualifiedNameColumnName = column.Nameする必要があります/クエリで行を見つけました。

これを修正すると、更新が正常に実行されます。いくつかの人がこれを確認できることを願っています。