首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架7和BindingList

实体框架7和BindingList
EN

Stack Overflow用户
提问于 2016-03-10 05:55:11
回答 1查看 2.4K关注 0票数 3

我正在尝试在Winforms中使用EF7,并且我想使用BindingList来支持双向绑定

在EF6中,我可以通过调用.ToBindingList来完成

代码语言:javascript
复制
_context = new ProductContext();
_context.Categories.Load(); 
this.categoryBindingSource.DataSource =
_context.Categories.Local.ToBindingList();

但是,在EF7中,既没有Local属性,也没有ToBindingList

如何使用EF7在Winforms上实现双向绑定?

EN

回答 1

Stack Overflow用户

发布于 2016-03-10 06:21:59

你永远不应该绑定,尤其是不能直接双向绑定到EF对象。这意味着您将在应用程序的整个生命周期中使用DbContext,随着时间的推移,这将使您陷入麻烦。

大多数情况下,使用EF对象是没有意义的,因为您几乎永远不会向用户显示确切的数据库对象。在大多数情况下,视图将显示多个数据对象的组合。

因此,不是直接使用对象,而是创建定制的视图模型以显示给用户,您可以从新的DbContext获取视图模型。这些视图模型可以实现INotifyPropertyChanged

完成获取后,释放DbContext,并在用户想要保存任何更改时创建一个新的any。

下面是一个简单的示例:

代码语言:javascript
复制
public class UserViewModel : INotifyPropertyChanged
{
    public int UserId { get; set; }
    public string UserName { get; set; }
    public int GroupId { get; set; }
    public string GroupName { get; set; }

    // INotifyPropertyChanged implementation or use Fody
}

public class UserModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual GroupModel Group { get; set; }
}

public class GroupModel
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual HashSet<UserModel> Users { get; set; } 
}

public class UserRepository
{
    public IEnumerable<UserViewModel> GetUsers()
    {
        using (var db = new YourDbContext())
        {
            return (
                from user in db.Users
                select new UserViewModel
                {
                    UserId = user.Id,
                    UserName = user.Name,
                    GroupId = user.Group.Id,
                    GroupName = user.Group.Name,
                }).ToArray();
        }
    }
    public void SaveChanges(UserViewModel user)
    {
        using (var db = new YourDbContext())
        {
            // get user
            // modify and...
            db.SaveChanges();
        }
    }
} 

可以轻松地将结果包装在BindingList

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35903428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档