Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使Linq2Sql与我的模型一起工作_C#_Sql_Linq To Sql_Dbml - Fatal编程技术网

C# 如何使Linq2Sql与我的模型一起工作

C# 如何使Linq2Sql与我的模型一起工作,c#,sql,linq-to-sql,dbml,C#,Sql,Linq To Sql,Dbml,我在一个项目中工作,我们使用SqlConnection、SqlCommand和普通SQL访问存储库。现在,我正在尝试迁移到Linq2Sql,我希望使用相同的模型。我怎样才能做到这一点 我将把项目结构简化为最有意义的示例。 假设我有以下课程: namespace Model { public class User { public int Id { get; set; } } } Model命名空间中的所有模型都是数据库实体的一对一副本 namespace

我在一个项目中工作,我们使用
SqlConnection
SqlCommand
和普通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。我已经在
Repository
项目中使用
User
表创建了一个
MyContext.dmbl
文件。它生成了以下类:

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

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

        public User GetUser()
        {
            return _myContext.Users.FirstOrDefault();
        }
    }
}
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();
        }
    }
}
或者我只是不了解
Linq2Sql
的目的和逻辑,它只是这样工作的


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

好的。最后,我找到了一个非常简单的答案-
Linq2Sql
不是我要找的库

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

这是你的电话号码

现在,当我了解到这一点时,我在问题中描述的内容可以很容易地重新表述为“如何使Linq2Sql首先成为代码”。答案很简单——我不能这么做

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

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

        public User GetUser()
        {
            return _myContext.Users.FirstOrDefault();
        }
    }
}
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();
        }
    }
}
命名空间存储库
{
公共MyContextDataContext:DbContext
{
公共数据库集用户{get;set;}
}
公共类用户存储库
{
私有MyContextDataContext_myContext=new MyContextDataContext();
公共用户GetUser()
{
返回_myContext.Users.FirstOrDefault();
}
}
}