1

ここで明らかな答えが欠けていると確信していますが、手を使うことができます。SubSonic は初めてで、バージョン 3 を使用しています。クエリと挿入ができるようになりましたが、挿入後に ID 列の値を取得する方法に行き詰まっています。Linq テンプレートについて言及した別の投稿を見ました。私はそれらを使用していません (少なくとも私はそうではないと思います...?)

ティア

... アップデート ...

そのため、SubSonic コードがどのように機能するかを監視しながらコードをデバッグしており、inidentity 列が無視されている場所を見つけました。データベースの ID 列のデータ型として int を使用し、それらを ID として設定します。int は c# では null 非許容のデータ型であるため、 (key==null) を実行してキー列に値があるかどうかをチェックする Add メソッド (public void Add(IDataProvider provider)) の論理テストは、問題。ID フィールドの新しい値を取得するコードは「真のパス」にあります。これは、int を null にすることはできず、ID 列のデータ型として int を使用しているため、このテストには合格しません。オブジェクトの ID フィールドに、入力していない 0 が含まれています。オブジェクトの初期化中に設定されていると思います。私はここで基地外ですか?データベースのデータ型を変更するのが答えですか?

別の質問 (もっと好奇心)。生成されたクラスの一部のプロパティが ? で宣言されていることに気付きました。データ型の後。私はこの宣言構造に慣れていません...何が得られますか? int (非キー フィールド) として宣言されているものと、int として宣言されているものがありますか? (キー フィールド)。これは、初期化時の処理方法と関係がありますか?

どんな助けでも大歓迎です!

- バンプ -

4

3 に答える 3

0

質問の最初の部分ではあまり役に立ちません。ここで説明されているように、おそらくそのための T4 テンプレートを作成する必要があります。

SubSonic 3 LinqTemplate Insert に関連付けられた ID 列の値を取得するにはどうすればよいですか?

「?」int 宣言の後に見つけたものは、null 許容型を参照しています。

http://msdn.microsoft.com/en-en/library/1t3y8s4s(VS.80).aspx

これは基本的に、プロパティが null になる可能性があることを意味します。

于 2010-05-25T12:58:50.143 に答える
0

これは私にとってはうまくいきます、私はまったく同じセットアップを使用しています:

Account account = new Account();
account.EmailAddress = emailAddress;
account.Identity = identifier;
account.IsActive = true;
account.Save();

int accountId = account.AccountId; // AccountId being an identity column.

この例ではエラー処理はありませんが、私の好みはわかります。

于 2010-06-01T13:45:50.600 に答える
0

私の以前の答えに加えて; 整数値を null にすることはできません。データベース列は主キーであるため、これは整数であり、定義によりnull であってはなりません。null 非許容整数のデフォルト値は0です。C# のデフォルト値を参照してください

Null 許容型に関する Mamoo のリファレンスも参照する価値があります。したがって、単体テストでは、失敗の場合は 0、合格の場合は 0 より大きい値に対してテストする必要があります。

于 2010-06-07T10:34:18.480 に答える