SqlConnection
私は、SqlCommand
およびプレーン SQL を使用してリポジトリにアクセスするプロジェクトに取り組んでいます。現在、Linq2Sql に移行しようとしていますが、同じモデルを使用したいと考えています。どうすればこれを達成できますか?
プロジェクト構造を最小限の意味のある例に減らします。
次のクラスがあるとします。
namespace Model
{
public class User
{
public int Id { get; set; }
}
}
名前空間のすべてのモデルはModel
、データベース エンティティの 1 対 1 のコピーです。
namespace Repository
{
public class UserRepository
{
private _sqlConnectionHelper = new SqlConnectionHelper();
public User GetUser()
{
var reader = _sqlConnectionHelper
.ExecuteAndReturnReader("SELECT * FROM [dbo].[Users]");
while (reader.Read())
{
return new User
{
Id = (int)reader["Id"]
};
}
return null;
}
}
}
現在、Linq2Sql に移行しようとしています。プロジェクトにテーブルを含むMyContext.dmbl
ファイルを作成しました。次のクラスが生成されました。User
Repository
namespace Repository
{
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Users")]
[global::System.Runtime.Serialization.DataContractAttribute()]
public partial class User: INotifyPropertyChanging, INotifyPropertyChanged
{
private int _ID;
public int ID
{
get
{
return this._ID;
}
set
{
if ((this._ID != value))
{
this.OnIDChanging(value);
this.SendPropertyChanging();
this._ID = value;
this.SendPropertyChanged("ID");
this.OnIDChanged();
}
}
}
// Some other methods
}
}
さて、問題は、エンティティ、リポジトリ、モデルなどをたくさん持っていることです。プロジェクト全体を変更して、新しく生成されたモデルを使用したくありませんが、Model
名前空間からのものは変更したくありません。Linq2Sql
モデルを操作するにはどうすればよいですか?
これらのモデルの場合、エンティティとリポジトリが同じオブジェクトであるため、アーキテクチャにも影響します。エンティティが CRUD オブジェクトである必要はありません。プロジェクトに最小限の変更を加え、次のようなプレーン SQL の代わりに便利な LINQ リクエストのみを使用したいだけです。
namespace Repository
{
public class UserRepository
{
private MyContextDataContext _myContext = new MyContextDataContext();
public User GetUser()
{
return _myContext.Users.FirstOrDefault();
}
}
}
または、目的とロジックについて何かを理解していないだけでLinq2Sql
、それがどのように機能するかだけですか?
もちろん、コンバーターを作成したり、リフレクションを使用してオブジェクトのプロパティごとにコピーを作成したりすることはできますが、それは良い解決策とは思えません。