我的数据库中有一堆表有一个GUID类型的列。当我生成我的视图时,我不希望这是脚手架的一部分,所以我使用[ScaffoldColumn(false)]。我不希望用户在“创建”新实体时输入实际的GUID。当用户创建新实体时,是否有任何方法可以自动添加新GUID(通过数据注释或其他方式?)的过程,或者是否必须为每个具有GUID的表修改控制器以便每个用户创建新条目的时间我确保在保存之前生成新的GUID吗?
感谢。
答案 0 :(得分:4)
这就是(恕我直言)新的脚手架功能鼓励不良代码。
您应该为视图定义单独的ViewModel。它们仅包含您希望用户更改的字段以及任何特定于视图的验证/规则。
在您的控制器操作中,您可以检查用户输入是否有效(ModelState.IsValid
),如果是,请在ViewModel属性与实体属性之间执行一些左右映射。
有关详细信息,请参阅ViewModel Best Practices。
但是,要回答您的问题,您可以在Id字段上使用HiddenInput
属性,以便将其呈现为<input type="hidden"..
。
关于设置Id,为您的实体创建一个基类,例如:
public abstract class BaseEntity {
public Guid Id {get;set;}
public BaseEntity() {
Id = Guid.NewGuid();
}
}
然后,您可以从此类继承您的实体,当您调用new MyEntity()
时,将调用基类构造函数,从而设置Id。