将数据库绑定到集合c#

时间:2016-03-11 14:04:16

标签: c# .net database collections binding

我正在使用C#开发一个数据密集型应用程序,并且需要一些关于管理数据的最佳方法的建议。我的应用程序将使用许多相关表,在应用程序和数据库之间有很多向后和向前移动。

我的问题是,最好处理数据的方法是什么?我的所有数据字段都在他们自己的类和集合中进行控制,因此,问题实际上更多的是将我的集合和对象绑定到数据库的最佳方法。

我应该手动创建自己的SQL连接/ SQL插入/更新查询,还是有其他方法可以执行此操作?例如,在Visual Studio中是否可以轻松创建强类型数据层,该数据层将自动查看插入/更新/删除等?

非常感谢

1 个答案:

答案 0 :(得分:1)

问。例如,在Visual Studio中是否可以轻松创建强类型数据层,该数据层将自动查看插入/更新/删除等?

实体框架听起来像你正在寻找的东西。当然,还有一些设置。对于大多数Web项目,实体框架会自动添加,如果没有,您可以随时通过NuGet包管理器添加它。

EntityFramework通过DbContext对象将模型绑定到数据库,如果根据您的模型不存在,则Code First甚至会生成数据库(如果存在并且模型发生更改,则可能必须迁移:{{ 3}})。我将采用这种方法(您可以稍后将以下代码更改为连接字符串到实时数据库)。

首先,您需要告诉应用程序要使用的数据库(是否存在),这可以在Web.Config文件中完成(不是唯一的方法)。

<强>的Web.Config

<configuration>
  ....
  <connectionStrings>
    <add name="ConnectionStringName" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DATABASENAME.mdf;Initial Catalog=DATABASENAME;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

注意 - 此连接字符串仅适用于VS2015。对于以前的版本,请使用:

Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\DATABASENAME.mdf

More reading

现在,我们可以使用“ConnectionStringName”来连接我们的上下文。

Context类必须从DbContext对象继承,我们将此连接字符串名称传递给基本构造函数(DbContext存在于System.Data.Entity命名空间中)。我将使用两个看起来相同的通用模型(ModelA ModelB) -

ModelA和ModelB

using System.ComponentModels.DataAnnotations;

public class ModelA
{
    public int Id { get; set; }

    [Required(ErrorMessage="You need to enter a name!")]
    [StringLength(40)]
    public string Name { get; set; }
}

注意 - 我正在使用DataAnnotations(必需,StringLength) - 这些非常酷,在您的模型上实现CRUD操作时非常有用。 另外 - 实体框架将自动使名为的属性:Id(或任何案例形式)或ModelNameId成为主键。有办法覆盖这个。

More reading on configuring Entity Framework

您甚至可以在考虑到人际关系的情况下创建模型。如果ModelA与ModelB具有一对多的关系,您可以在代码中反映这种关系:

public virtual ICollection<ModelB> ModelBs {get; set;}

More reading on DataAnnotations

现在,我们将使用DbSet集合将模型映射到表。这是看起来的样子:

using System.Data.Entity;
using YourProject.Data.Models;

namespace YourProject.Data.DAL
{
    public class YourContext : DbContext
    {
        public YourContext() : base("ConnectionStringName")
        {

        }

        public DbSet<ModelA> ModelAs { get; set; }
        public DbSet<ModelB> ModelBs { get; set; }

    }
}

More reading on creating relationships - 用于为数据库播种创建数据。

Database Initialization Strategies

我永远无法详细说明你能做的一切 - 但这里有一些简短的例子:

问。这一切做了什么?

您现在有一个强类型对象连接到您的数据库。它就像创建一个新的Context对象一样简单:

YourContext yourContext = new YourContext();

检索整个表非常简单:

IEnumerable<ModelA> modelAs = yourContext.ModelAs;

或按Id

查找行

ModelB modelB = yourContext.ModelBs.Find(id);

假设您抓住了modelB并想要更新它。这很简单:

modelB.Name = "Here's the new name";
yourContext.Entry(modelB).State = EntityState.Modified;
yourContext.SaveChanges();

添加:

yourContext.ModelAs.Add(newModel);

卸下:

yourContext.ModelBs.Remove(modelB);

REMEMBER 添加/更新/删除方法将需要调用SaveChanges();来自上下文。否则他们将被丢弃。

当然,这可能是实体框架最基本的概述。要了解更多信息,请查看以下教程:

More reading on configuring the context

WebForms with Entity Framework - Wingtip Toys

希望这可能对某人有所帮助。