EF模型与winforms和asp.net绑定

时间:2016-07-22 13:31:35

标签: c# asp.net winforms entity-framework

我所处的项目中应该有一个Web界面和一个winforms界面。它可能会从WinForms开始,将来我们将添加一个ASP.NET MVC Web界面。

我有使用ASP.NET MVC和EF6的经验,但在阅读了如何将EF POCO实体绑定到https://msdn.microsoft.com/en-us/data/jj682076.aspx中的winforms控件之后,我意识到它需要修改实体定义(代码优先),暴露详细信息winforms implementationantion。

有没有办法从模型层隐藏winforms的依赖关系?

3 个答案:

答案 0 :(得分:1)

我建议在描述的场景中,存储库代码由几个不同的前端项目使用,应该有一个公共中间层,用于从UI中抽象出数据库。

将winforms控件绑定到中间层对象。它根本不应该知道数据层。

答案 1 :(得分:1)

根据定义并考虑到您已经在使用MVCMVVM,您应该记住,POCO并非设计为绑定到视图(根本不是任何视图) 。 StackOverflow上有几个帖子甚至是问题,就像这两个:First | Second | (还有很多其他人)。

考虑到该声明,您应该设计一个ViewModel,将POCO映射到您的屏幕的有用项目(HTMLWinforms,原生移动或任何其他)并避免使用数据注释(将它们保持在最低限度)。

您可能需要两个ViewModel个库,一个用于MVC,另一个用于Winforms,每个库都有自己的配置和所有,但由于它'更多关于数据传输而不是业务逻辑,这很好。

要以更好的(AKA:自动)方式将ViewModels连接到POCO,反之亦然,请仔细查看映射库,例如AutoMapper或其他。我喜欢AutoMapper因为有了它,我可以在不同的程序集中使用代码优先方法构建我的映射定义,保持一切真正干净并避免数据注释(我讨厌)。

答案 2 :(得分:0)

在一般情况下,获得通用实体模型不是问题。实际上,为了使导航属性在WinForms中可绑定,MS建议实现自动提供IBindingList集合的IListSource接口。但是,您可以将ObservableCollection类型用于适用于Web应用程序的导航属性,并在WinForms应用程序中使用IBindingList(如果使用MVVM模式,最好在视图模型中执行此类转换)。