新しい SubSonic 3 プレビューを試していますが、MVC プロジェクトで基本的な CRUD 操作に使用すべきパターンがよくわかりません。
モデルにできるだけ多くのデータ ロジックを保持しようとしているので、各モデルの部分クラスにいくつかの静的 CRUD メソッドを追加しました。
たとえば、単一のレコードのみを持つ構成テーブルがあるとします。したがって、私の部分クラスは次のようになります。
public partial class Configuration{
// cut down; mocking hooks here IRL
private static IRepository<Configuration> Table = new MyRepository<Configuration>();
public static Configuration Retrieve()
{
var config = Table.GetAll().FirstOrDefault();
if (config == null)
{
config = new Configuration();
Table.Add(config);
}
return config;
}
public static void Update(Configuration target)
{
Table.Update(target);
}
}
現在、構成テーブルには主キーの ID 列があり、テーブルに新しいレコードを追加すると、標準の「ID 列に明示的な値を挿入できません」というエラーがスローされるため、これは機能しません。SubSonic 3 は、それらを新規作成したときに、データベース スキーマの規則にうまく対応するクラスを生成しないようです (つまり、デフォルト値がない、データベースで null 可能な値に対して null 可能なプリミティブがないなど)。
現在、テーブルとパターンを変更してこれらの問題を回避できますが、この問題を回避できない場合、つまりデータベースに新しいレコードを追加し、ID を主キーとして持つ必要がある場合について考えています。
このパターンが正しいかどうかも疑問です。SubSonic では、リポジトリ ビジネスを行うためのさまざまな方法が提供されているため、どれを使用すればよいかわかりません。私は自分のモデルをできるだけ多く使用したいので (そうでなければ、Linq to Sql だけではないのでしょうか?)、モデルを CRUD しようとするときに SubSonic のクエリ構築機能を使用したくありません。
ここで何をすべきですか?私の MVC プロジェクトで SubSonic 3 を使用するための CRUD パターンに関するアドバイスは歓迎します。また、SubSonic 3 のこの主題をカバーしているが、Google 検索で上位にランクされていない Web サイトへのリンクも歓迎します...
ロブに直接尋ねた(リンクはこちら)。少なくとも私の DB では、生成されたコードに致命的なバグがあります。ああ、アルファソフトウェア。
アップデート
Subsonic3 のリリースに伴い、この質問を再考するためのちょっとしたきっかけをいただけますか?