实体框架4-在ASP.Net MVC 3中处理GUID



我的数据库中有一堆表,它们有一个GUID类型的列。当我生成视图时,我不希望这成为脚手架的一部分,所以我使用[SscaffoldColumn(false)]。我不希望用户在"创建"新实体时输入实际的GUID。当用户创建新实体时,是否有任何方法可以自动添加新GUID(通过数据注释或其他方式??),或者我是否必须修改每个具有GUID的表的控制器,以便每次用户创建新条目时,我都确保在保存前生成新的GUID?

谢谢。

这就是(IMHO)新的脚手架特性助长坏代码的地方。

您应该为视图定义单独的ViewModels。这些仅包含您希望用户更改的字段以及任何特定于视图的验证/规则。

在控制器操作中,您可以检查用户输入是否有效(ModelState.IsValid),如果有效,请在ViewModel属性和实体属性之间进行一些左右映射。

有关更多详细信息,请参阅ViewModel最佳实践。

但是,为了回答您的问题,您可以在Id字段上使用HiddenInput属性,以便将其呈现为<input type="hidden"..

关于设置Id,为您的实体创建一个基类,例如:

public abstract class BaseEntity {
    public Guid Id {get;set;}
    public BaseEntity() {
        Id = Guid.NewGuid();
    }
}

然后,您可以从这个类继承实体,当您调用new MyEntity()时,基类构造函数将被调用,从而设置Id.

最新更新