您的位置:首页 > 数据库

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

2016-11-25 10:28 405 查看
一、数据库初始化策略

数据库初始化有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改为李四,之前都是王二。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息