我正在使用C#开发一个数据密集型应用程序,并且需要一些关于管理数据的最佳方法的建议。我的应用程序将使用许多相关表,在应用程序和数据库之间有很多向后和向前移动。
我的问题是,最好处理数据的方法是什么?我的所有数据字段都在他们自己的类和集合中进行控制,因此,问题实际上更多的是将我的集合和对象绑定到数据库的最佳方法。
我应该手动创建自己的SQL连接/ SQL插入/更新查询,还是有其他方法可以执行此操作?例如,在Visual Studio中是否可以轻松创建强类型数据层,该数据层将自动查看插入/更新/删除等?
非常感谢
答案 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
现在,我们可以使用“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
希望这可能对某人有所帮助。