EF模型与winforms和asp.net绑定

本文关键字:asp net 绑定 winforms 模型 EF | 更新日期: 2023-09-27 17:58:10

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

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

有什么方法可以从模型层隐藏winforms的依赖关系吗?

EF模型与winforms和asp.net绑定

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

考虑到这一点,您应该设计一个ViewModel,将您的POCO映射到屏幕上有用的项目(HTMLWinforms、本地移动设备或任何其他),并避免使用数据注释(将它们保持在最小数量)。

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

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

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

将winforms控件绑定到中间层对象。它应该完全不了解数据层。

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