2011-07-09 4 views
1

ここからLINQ2SQLで始まり、いくつか質問があります。LINQ2SQL生成クラスのデフォルトコンストラクタのアクセス修飾子

私はdbテーブルを1つ持っています。顧客は、私はsqlmetalを実行し、私のORMクラスを生成します。

お客様のコンストラクターに特定のルールを適用したいと思います。 firstName、lastNameメンバーのメンバーを提供する必要があります。

私はsqlmetalで新しいコンストラクタを作成したが にCustomerクラスを生成した2つのパラメータのfirstName、secondNameを取った後、私はこの アセンブリを消費し何にそれを公開したくないよう内部ように、デフォルトのパラメーターなし コンストラクタをマーク。

パブリックから内部へのパラメータのないコンストラクタの新しい保護レベルのため、SubmitChanges()を試してみると、私のコードが文句を言うようになりました。

List<Customer> customerList = new List<Customer>(); 
customerList = dbInstance.Customer.ToList(); 
Customer customerToDelete = customerList.Where(c => c.Customer_id == 100).First(); 
dbInstance.Customer.DeleteOnSubmit(customerToDelete); 
dbInstance.SubmitChanges(); <-- error thrown 

「このオブジェクトのために定義されていませんパラメータなしのコンストラクタ」

なぜアクセス修飾子は、お客様のORMクラスのデフォルトコンストラクタのパブリックでなければなりませんか?それが公開されると、これは期待どおりに動作します。

+0

興味深いことに、オブジェクトを実現する*必要がある場合、私は驚かないでしょう。それらを提出する必要があるのは奇妙です。 –

答えて

0

LinqToSqlは部分クラスを生成するので、それを使うことができます。また、生成されたファイルは編集しないでください。モデルの更新後はすべての変更が失われます。

+0

ビジネスロジックを別のCustomerクラスのpartialとしてマークすると、i)ビジネス/データロジックの分離とii)ビジネスデータを失うことなくデータレイヤの再構築が可能になります。だから、私はあなたの要点を取りますが、部分的なORMクラスが公開するプロパティのいくつかで、パラメータのないコンストラクタを隠すか、アクセス修飾子を変更したい場合はどうでしょうか? – FuzzyFrog

関連する問題