0

我在一个我们正在使用的项目上工作SqlConnectionSqlCommand并且使用纯 SQL 来访问存储库。现在,我正在尝试迁移到 Linq2Sql,并且我想使用相同的模型。我怎样才能做到这一点?

我将把项目结构简化为最小的有意义的例子。
假设我有以下课程:

namespace Model
{
    public class User
    {
        public int Id { get; set; }
    }
}

命名空间中的所有模型Model都是数据库实体的一对一副本。

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 对象。我只想对项目进行最小的更改,并且只使用方便的 LINQ 请求,而不是像这样的普通 SQL:

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

        public User GetUser()
        {
            return _myContext.Users.FirstOrDefault();
        }
    }
}

或者我只是不明白关于目的和逻辑的东西Linq2Sql,它是如何运作的?

当然,我可以编写转换器或使用反射并逐个属性地复制对象,但这听起来不是一个好的解决方案。

4

1 回答 1

0

好的。最后,我找到了一个非常简单的答案——Linq2Sql不是我要找的图书馆。

对象关系映射有不同的方法:代码优先数据库优先模型优先

这是关于它们差异的好 StackOverflow 文章

现在,当我了解它时,我在问题中所描述的内容可以很容易地改写为“我怎样才能让 Linq2Sql 成为代码优先”。答案很简单——我不能这样做。

作为一些调查的结果,我了解到我正在寻找完全适合我的项目的实体框架。
现在,我的存储库如下所示:

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 回答