CODE First方法:
EF是一个基于ADO.NET之上的一个类,我们只是使用者,如同Microsoft.Practices.EnterpriseLibrary.Data,会使用就可以了。
EF是重要的三项:
1.DBContext,一般指加密了的Connection,如
protected DBBase( string key )
: base( GetDecryptConnectionString( key ) )
{
}
2.DbSet<>,将数据实体包装成以一个可以查询的集合。
3.保存SaveChanges(),根据状态EntityState.Added进行持久化。
==================
1.实体BaseUserInfo,并采用Atribute将其与DB之前的关系进行映射。
[Table("Base_User")]
public class BaseUserInfo
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Required(ErrorMessage = "UserID required.")]
[Column("UserID", TypeName = "int")]
public int UserID { get; set; }
[Column("UserName", TypeName = "nvarchar")]
public string UserName { get; set; }
[Column("UserPwd", TypeName = "nvarchar")]
[StringLength(100, ErrorMessage = "UserPwd must be", MinimumLength = 1)]
public string UserPwd { get; set; }
[Column("CreateTime", TypeName = "datetime")]
public DateTime? CreateTime { get; set; }
}
2.DB上下文
public class GovContext : DbContext
{
private const string GOV_CONNETION_STRING = "govEntities2";
public GovContext()
: base(GOV_CONNETION_STRING)
{
}
public GovContext(string connetionString)
: base(connetionString)
{
}
public DbSet<BaseUserInfo> BaseUsers { get; set; }
//public DbSet<BaseUserInfo> BaseUsers { get; set; }
//public DbSet<BaseUserInfo> BaseUsers { get; set; }
}
3.sp的编写方式
private GovContext context;
public BaseUserDAL(GovContext context)
{
this.context = context;
}
public void UploadBaseUserInfo(BaseUserInfo info)
{
string sqlString = @"exec [sp1_Base_User_u] @UserID,@UserName,@UserPwd";
this.context.Database.ExecuteSqlCommand(sqlString,
new SqlParameter("UserID", info.UserID),
new SqlParameter("UserName", info.UserName),
new SqlParameter("UserPwd", info.UserPwd));
}
public void InsertBaseUserInfo(BaseUserInfo info)
{
string sqlString = @"exec [sp1_Base_User_i] @UserID,@UserName,@UserPwd, @CreateTime";
this.context.Database.ExecuteSqlCommand(sqlString,
new SqlParameter("UserID", info.UserID),
new SqlParameter("UserName", info.UserName),
new SqlParameter("UserPwd", info.UserPwd),
new SqlParameter("CreateTime", DateTime.Now));
}
4.调用方式
private GovContext govContext = new EFCodeFirst.GovContext();
protected void Page_Load(object sender, EventArgs e)
{
/*增加*/
BaseUserInfo info = new BaseUserInfo();
info.UserID = 6;
info.UserName = "bbb";
info.UserPwd = "bbb";
//info.CreateTime = DateTime.Now;
BaseUserDAL baseUserDAL = new BaseUserDAL(govContext);
baseUserDAL.InsertBaseUserInfo(info);
govContext.SaveChanges();
/*增加没有SP
BaseUserInfo info = new BaseUserInfo();
info.UserID = 6;
info.UserName = "ccc";
info.UserPwd = "ccc";
info.CreateTime = DateTime.Now;
govContext.BaseUsers.Add(info);
//govContext.Entry(info).State = EntityState.Added;
//govContext.Entry(info).State = EntityState.Modified;//更新
//govContext.Entry(info).State = EntityState.Deleted;//删除
govContext.SaveChanges();*/
Response.Write("操作成功!");
}
6. EFProviderWrapperToolkit.dll记录sql日志,也可以借助sqlProfile进行分析
7.EFCachingProvider.dll、EF下层的缓存,对调用层透明。
8.LINQPad,方面验证和分析LINQ