当前位置: 首页 > 工具软件 > dew-framework > 使用案例 >

Entity Framework and DevExpress ASP NET

万俟玉书
2023-12-01

使用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属性

 

 类似资料:

相关阅读

相关文章

相关问答