0

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ファイルを作成しました。次のクラスが生成されました。UserRepository

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、それがどのように機能するかだけですか?

もちろん、コンバーターを作成したり、リフレクションを使用してオブジェクトのプロパティごとにコピーを作成したりすることはできますが、それは良い解決策とは思えません。

4

1 に答える 1

0

Ok。最後に、私は非常に単純な答えを見つけました -Linq2Sql私が探していたライブラリではありません.

オブジェクト リレーショナル マッピングには、 code-firstdatabase-firstmodel-firstなどのさまざまなアプローチがあります。

ここに、それらの違いに関する優れた StackOverflow の記事があります。

さて、私がそれを学んだとき、私の質問で説明したことは、「Linq2Sqlをコードファーストにする方法」と簡単に言い換えることができました. 答えは簡単です。私にはできません。

いくつかの調査の結果、自分のプロジェクトに完全に適合する Entity Framework を探していたことがわかりました。
今、私のリポジトリは次のようになります。

namespace Repository
{
    public MyContextDataContext : DbContext 
    {
        public DbSet<User> Users { get; set; }
    }

    public class UserRepository
    {
        private MyContextDataContext _myContext = new  MyContextDataContext();

        public User GetUser()
        {
            return _myContext.Users.FirstOrDefault();
        }
    }
}
于 2015-07-17T11:05:51.757 に答える