使用WebForms的3种方法:
EntityDatasource(update from NuGget,系统自带的版本不支持EF6,所以要手动升级)
EntityServerModeDataSource(DevExpress自己开发的数据源)
ObjectDataSource(with LINQ)
准备工作:下载Chinook Database。
1、新建一个空白的WebForm项目。
2、添加一个空白的类库项目,将ORM层分离出来。
3、用Entity Data Model Wizard的Code First from database生成EF类。
连接Chinook数据库
自动生成EF类文件
将ConnectionString复制到WebForm项目的Web.Config中
添加GridView控件
Nugget升级EntityDataSource控件
添加EntityDataSource控件
设置EntityDataSource控件的ContextTypeName、EntitySetName和EnableInsert等属性
设置GridView的DataSource属性,并用设计器,设置Column等属性,编译运行。
总结EntityDataSource:需要从NuGet升级控件、设计时支持很差(需要手动制定属性,GridView不能自动绑定字段和属性)
EntityServerModeDataSource:Dev的控件、CRUD操作需要额外的代码。参考Devexpress Demo-Large Database(server mode)。
插入一个EntityServerModeDataSource控件
手动代码设置KeyExpression
否则会报错
EntityServerModeDataSource控件添加3个事件:Inserting、Updating、Deleting。
protected void EntityServerModeDataSource1_Selecting(object sender, DevExpress.Data.Linq.LinqServerModeDataSourceSelectEventArgs e)
{
e.KeyExpression = "ArtistId";
}
protected void EntityServerModeDataSource1_Inserting(object sender, DevExpress.Data.Linq.LinqServerModeDataSourceEditEventArgs e)
{
var item = new Artist() { Name = (string)e.Values["Name"] };
using (ChinookModel context = new ChinookModel())
{
context.Artist.Add(item);
context.SaveChanges();
}
}
protected void EntityServerModeDataSource1_Updating(object sender, DevExpress.Data.Linq.LinqServerModeDataSourceEditEventArgs e)
{
int id = (int)e.Keys[ASPxGridView1.KeyFieldName];
using (ChinookModel context = new ChinookModel())
{
var item = context.Artist.Find(id);
if (item != null)
{
//这里需要循环处理所有可能更新的字段。
item.Name = (string)e.Values["Name"]; context.SaveChanges();
}
}
e.Handled = true;
}
protected void EntityServerModeDataSource1_Deleting(object sender, DevExpress.Data.Linq.LinqServerModeDataSourceEditEventArgs e)
{
int id = (int)e.Keys[ASPxGridView1.KeyFieldName];
using (ChinookModel context = new ChinookModel())
{
var item = context.Artist.Find(id);
if (item != null)
{
context.Artist.Remove(item);
context.SaveChanges();
}
}
e.Handled = true;
}
同时GridView也要添加相对应的代码
protected void ASPxGridView1_RowInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e)
{
ASPxGridView gv = sender as ASPxGridView;
if ((gv != null) && (gv.DataSourceID == EntityServerModeDataSource1.ID))
gv.CancelEdit();
}
protected void ASPxGridView1_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
{
ASPxGridView gv = sender as ASPxGridView;
if ((gv != null) && (gv.DataSourceID == EntityServerModeDataSource1.ID))
gv.CancelEdit();
}
ObjectDataSource:使用LINQ查询结果,对正在处理的数据的完全控制。
需要新建一个DataSource类,来连接EF和ObjectDataSource控件。
然后指定CRUD的函数
指定Gridview的DataSourceForceStand属性