我们创建一个EF对象,项目与数据库打交道的时候,调用EF,而不是Ado.net ,使用EF来创建数据库,再更新到数据库中。过程如下:
1 在项目中点击“添加”--》“选择新建项”--》“数据”-->Ado.Net数据实体模型--》选择“空数据模型”。
2 创建号之后就要创建数据表,创建过程如下图所示:
多张数据表之间的关系可以通过“关系”来建立联系。
新增数据:
///生命一个上下文
DataModel1Container dbcontext = new DataModel1Container();
////创建用户,定义两个订单
UserInfo userinfo = new UserInfo();
userinfo.UserName = "高荣磊";
//添加一个新用户
dbcontext.UserInfo.Add(userinfo);
////创建两个订单
OrderInfo order1 = new OrderInfo();
order1.Content = "Shit1";
dbcontext.OrderInfo.Add(order1);
OrderInfo order2 = new OrderInfo();
order2.Content = "Shit2";
dbcontext.OrderInfo.Add(order2);
////关联三个实体
////1 通过UserInfo添加订单
userinfo.OrderInfo.Add(order1);
userinfo.OrderInfo.Add(order2);
//////2 通过OrderInfo指定用户是谁
order1.UserInfo = userinfo;
order2.UserInfo = userinfo;
//保存所有改变
dbcontext.SaveChanges();
#endregion
修改数据:
#region 修改数据
UserInfo Modify = new UserInfo();
Modify.ID = 9;
Modify.UserName = "高山";
//修改整行数据
// dbcontext.Entry(Modify).State = EntityState.Modified;
dbcontext.UserInfo.Attach(Modify);
//修改一行数据的某个属性
dbcontext.Entry(Modify).Property(u => u.UserName).IsModified = true;
#endregion
#region 查询数据
var temp = from u in dbcontext.UserInfo
where u.ID > 1 //&& u.UserName.Contains(‘G‘)
//&& u.UserName.StartsWith("G")
select u;
Console.WriteLine(temp.Count());
foreach(var u in temp )
{
Console.WriteLine(u.ID+" "+u.UserName);
}
#endregion
EF延迟加载的两种方法
1 通过IQueryable来实现数据的延迟加载
IQueryable<UserInfo> temp = from u in dbcontext.UserInfo
where u.ID > 1 //&& u.UserName.Contains(‘G‘)
//&& u.UserName.StartsWith("G")
select u;
Console.WriteLine(temp.Count());
foreach(var u in temp )
{
Console.WriteLine(u.ID+" "+u.UserName);
}
2 通过数据表之间的关联,也就是利用导航属性
var temp1 = from u in dbcontext.UserInfo
select u;
foreach(var userinfo in temp1)
{
foreach (var orderinfo in userinfo.OrderInfo)
{
Console.WriteLine(userinfo.UserName+" "+" "+orderinfo.ID+" "+orderinfo.Content);
}
}
其中userinfo.OrderInfo当用到的时候再去查数据。