EF三种编程⽅式详细图⽂教程(C#+EF)之CodeFirst Code First
Code First模式我们称之为“代码优先”模式,是从EF4.1开始新建加⼊的功能。使⽤Code First模式进⾏EF开发时开发⼈员只需要编写对应的数据类(其实就是领域模型的实现过程),然后⾃动⽣成数据库。这样设计的好处在于我们可以针对概念模型进⾏所有数据操作⽽不必关系数据的存储关系,使我们可以更加⾃然的采⽤⾯向对象的⽅式进⾏⾯向数据的应⽤程序开发。
从某种⾓度来看,其实“Code First”和“Model First”区别并不是太明显,只是它不借助于实体数据模型设计器,⽽是直接通过编码(数据类)⽅式设计实体模型(这也是为什么最开始“Code First”被叫做“Code Only”的原因)。但是对于EF它的处理过程有所差别,例如我们使⽤Code First就不再需要EDM⽂件,所有的映射通过“数据注释”和“fluent API”进⾏映射和配置。另外需要注意的是“Code First”并不代表⼀定就必须通过数据类来定义模型,事实上也可以通过现有数据库⽣成数据类。
那么我们⾸先看⼀下传统的Code First如何使⽤。
⾸先创建⼀个控制台应⽤程序,接下来添加两个类“Order”和“OrderDetail”,我们可以看到这两个类只是简单的C#对象
(POCO,Plain Old C# Object)这两个类基本和EF没有任何关系,需要注意的是这两个类有两个导航属
性“Order.OrderDetails”和“OrderDetail.Order”:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoEF
{
class Order
{
public int Id { get; set; }
public string Customer { get; set; }
public System.DateTime OrderDate { get; set; }
public virtual List<OrderDetail> OrderDetails { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoEF
{
class OrderDetail
{
public int Id { get; set; }
public string Product { get; set; }
writeline教程public string UnitPrice { get; set; }
public int OrderId { get; set; }
public virtual Order Order { get; set; }
}
}
有了这两个类之后让我们定义⼀个数据库上下⽂,有了它我们就可以对数据进⾏增删改查操作了,这个类必须继承
于"System.Data.Entity.DbContext”类以赋予它数据操作能⼒。因此接下来我们需要给这个应⽤安装EntityFramework包,因为到⽬前为⽌我们并没有引⼊EF框架相关的任何内容,我们需要引⼊EF相关程序集。但是我们有更好的选择那就是NuGet。通过NuGet进⾏在线安装:项⽬中右键选择"Manage NuGet Packages…”;选择Online;再选择“EntityFramework”;然后点击安装即可。
数据库上下⽂操作类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoEF
{
class Program
{
static void Main(string[] args)
{
using (var ctx = new OrderContext())
{
var o = new Order();
o.OrderDate = DateTime.Now;
ctx.Orders.Add(o);
ctx.SaveChanges();
var query = from order in ctx.Orders
select order;
foreach (var q in query)
{
Console.WriteLine("OrderId:{0},OrderDate:{1}", q.Id, q.OrderDate);
}
Console.Read();
}
}
}
运⾏结果:
如果是第⼀次使⽤EF Code First的朋友⼀定会有疑问,我们没有进⾏任何数据库配置,增加了⼀条数据通过查询确实保存上了,那么我们的数据到底在哪呢?事实上如果⽤户不进⾏数据库配置EF默认会使⽤“.\SQLEXPRESS”数据库实例,如果你没有安
装“.\SQLEXPRESS”则默认使⽤LocalDb,关于LocalDb的具体细节请看:。我们可以在这⾥到系统⾃动创建的数据库:
但是多数情况下我们是希望⾃⼰控制这个数据库的,例如我想让他保存在我机器上的”.\SQL2008”实例上,此时我们就需要在配置⽂件
App.Config中配置⼀个数据库连接串,然后在我们的数据库上下⽂中指定这个连接名称。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit go.microsoft/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, P </configSections>
<connectionStrings>
<add name="CodeFirstDb" connectionString="Data Source=LENOVO\SQLEXPRESS;Database=CodeFirstDb;UID=sa;PWD=sql;" providerName="System.Data. </connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
OrderContext类,构造函数多了⼀个连接名参数:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论