【发布时间】:2015-08-14 11:28:49
【问题描述】:
我首先在测试项目中使用实体框架代码。我将代码分布在不同的层中,如下所示
模型层
这个层是所有其他层/项目的参考
namespace Model
{
Public class Sample
{
Public string Name
[ForeignKey("Category")]
public int CatrgoryId
Public Category Category
}
}
DAL
namespace DAL
{
public class SampleContext:DbContext
{
...
}
}
在 DAL 中,我只有上下文类和迁移
BLL
namespace BLL
{
public class SampleBLL
{
public List<Sample> GetAll()
{
retrn new SampleContext().Samples().ToList()
}
}
}
用户界面
namespace UI
{
public class UIHelper
{
public List<Sample> GetSamples()
{
return new SampleBLL().GetAll();
}
}
}
在 UI 中使用 EF 实体模型对象似乎不切实际,因为它们可能具有导航属性并且不能直接绑定到像 DataGridView 这样的控件,因为在这种情况下,当我需要显示时,datagridview 将同时具有 CategoryId 和 Category 列类别名称为类别,例如DataGridView.DataSource = new SampleBLL().GetAll()
我能想到的一种解决方案是使用 ViewModel 类并手动将实体模型对象映射到 BLL 中的 viewmodel 对象并将 viewmodel 对象返回给 UI,但是,引入一个新层 ViewModel 将意味着复制我的所有模型对象并进行微小的更改。
例如上面示例模型的视图模型将
namespace Model
{
Public class Sample
{
Public string Name
public int CatrgoryId
public string CategoryName
}
}
是我仅有的视图模型层选项,还是有其他有效的方法可以直接在 UI 中使用实体模型。
【问题讨论】:
标签: c# entity-framework ef-code-first