我有这个实体:
public class MyEntity : IMergeable<Entities.EntityExample>
{
[Required]
public string Code { get; set; }
[Required]
public string Label{ get; set; }
public System.DateTime DateStart { get; set; }
}
我想在ViewModel中复制它,它将有一个名为DateEnd的第4个属性。我在想这样做:
namespace MyNamespace.ViewModels
{
public class ExampleViewModel
{
public ExampleViewModel(MyEntity myEntity)
{
myentity = myEntity;
}
public myEntity myentity { get; set; }
[Required]
public string DateEnd { get; set; }
}
}
这样可行,但我的问题是我的视图模型将按以下方式排列:
myViewModel.myentity.Code
myViewModel.myentity.Label
myViewModel.myentity.DateStart
myViewModel.DateEnd
当我真正想要的是:
myViewModel.Code
myViewModel.Label
myViewModel.DateStart
myViewModel.DateEnd
或者至少(不太好):
myViewModel.myentity.Code
myViewModel.myentity.Label
myViewModel.myentity.DateStart
myViewModel.myentity.DateEnd
答案 0 :(得分:2)
您可以在视图模型上公开只访问基础实体属性的属性:
private myEntity _entity;
public DateTime DateStart {
get { return _entity.DateStart; }
set { _entity.DateStart = value; }
}
但我真的只是创建一个新的视图模型,然后使用automapper或普通工厂之类的东西将视图模型转换为您的实体。我想这是重复但实体 - &gt;视图模型是我从未担心过的地方。
public class ViewModel
{
public string Code { get; set; }
public string Label{ get; set; }
public DateTime DateStart { get; set; }
public DateTime DateEnd { get; set; }
}
var entity = new myEntity {
Code = viewModel.Code,
Label = viewModel.Label,
DateStart = viewModel.DateStart
... dont know what you want to do with DateEnd
}
但是那时你在哪里以及如何处理验证?您在实体上有注释,因此您可以转换为实体,然后检查实体的有效性,但您将在DateEnd上失去验证,因为它不是您实体的属性。所以我会在视图模型上添加验证并在转换为实体之前检查其有效性。
答案 1 :(得分:2)
您可以直接从您的实体继承:
public class ExampleViewModel : MyEntity
{
[Required]
public string DateEnd { get; set; }
}