EF CodeFirst关于数据库的一些基本操作

一、数据库初始化策略


数据库初始化有4种策略

策略一:数据库不存在时重新创建数据库

Database.SetInitializer<EFCodeFirstDbContext>(new CreateDatabaseIfNotExists<EFCodeFirstDbContext>());

策略二:每次启动应用程序时创建数据库

Database.SetInitializer<EFCodeFirstDbContext>(new DropCreateDatabaseAlways<EFCodeFirstDbContext>());

策略三:模型更改时重新创建数据库

Database.SetInitializer<EFCodeFirstDbContext>(new DropCreateDatabaseIfModelChanges<EFCodeFirstDbContext>());

策略四:从不创建数据库

Database.SetInitializer<EFCodeFirstDbContext>(null);

二、执行SQL语句


有时候在code first中也会执行sql来做查询,或者是查询视图。

using (var db = new StudentDbContext())
{
    List<Person> persons = db.Database.SqlQuery<Person>("select * from Person where personId=@id", new SqlParameter("@id", "1000")).ToList();
    foreach (var person in persons)
    {
       Console.WriteLine("{0}  {1}  {2}  {3}", person.PersonId, person.Name, person.Age, person.Sex);
    }
}
Console.ReadLine();

查询结果如下图所示:

上面的例子中Person是一个表,查询视图的方法与之相同。


三、执行存储过程

有时候使用sql能解决的问题使用ef就不那么简单,比如查找树的某个节点的所有父节点或所有子节点。而这种情况如果使用存储过程就会很简单。

下面是一个简单的存储过程:

CREATE PROCEDURE TestProcedure
    @personId nvarchar(100)
AS
BEGIN
    select * from Person where PersonId=@personId;
END
GO

下面EF执行存储过程:

List<Person> persons = db.Database.SqlQuery<Person>("TestProcedure @personId", new SqlParameter("@personId", "1000")).ToList();
foreach (var person in persons)
{
    Console.WriteLine("{0}  {1}  {2}  {3}",person.PersonId,person.Name,person.Age,person.Sex);
}

执行结果如下图所示:



上面的都是查询使用的都是SqlQuery,如果需要更新操作可以使用ExecuteSqlCommand方法。

 int count = db.Database.ExecuteSqlCommand("update Person set Name=@name where PersonId=@personId", new[] { new SqlParameter("@name", "李四"), new SqlParameter("@personId", "1000") });
 Console.WriteLine(count);

执行结果如下图所示:


打开数据库,查看执行结果如下图所示:


从上面截图可以看到已经将personId=1000的Name改为李四,之前都是王二。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值