Q.例如是否有可能在Visual Studio中轻松创建一个强类型数据层,将插入/更新/删除等后自动看?
实体框架听起来像你正在寻找的东西。当然,有一些设置涉及。对于大多数Web项目,Entity Framework会自动添加,如果不是,您可以随时通过NuGet包管理器添加它。
EntityFramework通过DbContext对象将模型绑定到数据库,如果基于模型不存在,Code First甚至会生成一个数据库(如果存在并且模型更改,则可能需要迁移:More reading )。我将采取这种方法(您可以稍后将以下代码更改为连接字符串到实时数据库)。
首先,您需要告诉您的应用程序使用哪个数据库(无论它是否存在),并且这可以在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 on configuring Entity Framework
,我们可以用 “的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 DataAnnotations
你甚至可以考虑建立关系,你的模型。如果MODELA将与ModelB一个一对多的关系,可以反映出在代码中这种关系:
public virtual ICollection<ModelB> ModelBs {get; set;}
More reading on creating relationships
我们现在将你的模型映射到使用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; }
}
}
Database Initialization Strategies - 为您的数据库种植创建数据。
More reading on configuring the context
我将永远无法所有的细节,你可以做 - 但这里有几个短的例子:
问:这是什么都做什么?
现在,您已将强类型对象连接到数据库。这是因为创建一个新的上下文对象一样简单:
YourContext yourContext = new YourContext();
检索整个表一样简单:
IEnumerable<ModelA> modelAs = yourContext.ModelAs;
或编号找到一个排
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);
记住添加/更新/删除方法都将需要到的SaveChanges()的调用;从上下文。否则他们将被丢弃。
当然,这可能是实体框架可用的最基本的概要。要看到更多的行动中检查出这些教程:
WebForms with Entity Framework - Wingtip Toys
MVC with Entity Framework - Contoso University
希望这可以有所帮助的人。
你看过Entity Framework和Fluent API吗? –
听起来像EF代码第一 – Byron
@DanOrlovsky是的,只是看了EF的测试,尽管一个轻微的学习曲线一切似乎都很好。我也注意到我可以使用强类型的DataSet/DataAdaptors。任何建议哪种方法最好?我的经验是,数据集现在是旧派,EF是前进的方向? –