MvcScaffolding:添加默认日期时间字段和当前用户字段(来自表单身份验证)
本文关键字:字段 用户 身份验证 表单 添加 默认 日期 时间 MvcScaffolding | 更新日期: 2023-09-27 18:33:10
我正在开发一个使用 MvcScaffolding 来构建快速 CRUD 接口的项目(非常感谢 Steven Sanderson(,但我在添加两个"代码优先"字段时遇到了麻烦(我通常在 SQL Server 中工作,对 C# 知之甚少(。
我想为DEFAULT (getdate())
的SQL等效项添加一个列,以及一个varchar字段,用于表示通过项目上的表单身份验证登录的用户的名称(我相信这是存储HttpContext.Current.User.Identity.Name
,但我不确定(。
最终目标是允许用户登录;创建新记录并保存;然后列表/索引页面仅返回其用户名存储在CreatedBy
字段中的记录(在SQL中,类似于WHERE CreatedBy = <HttpContext.Current.User.Identity.Name>
(。
任何建议表示赞赏!
我能感受到你的痛苦。我记得我自己也遇到过这个问题。
可悲而简单的答案是,目前还没有可以与 Code First 一起使用的默认注释。在代码优先方面,还有很多不足之处。
下面是实体框架提供的所有可用批注的列表。如您所见,它仍然有点有限。
http://msdn.microsoft.com/en-us/library/gg197525(v=VS.103(.aspx
使用实体框架时,我自己依赖于使用从我从头开始创建的数据库生成的简单 EDMX 文件。这使您不必担心编写所有 CRUD 语句,并且仍然可以控制小事情。
就 MVC 基架而言,EDMX 文件的工作方式与代码优先模型完全相同。我是 MVC 脚手架的忠实粉丝,我将它与多个项目的 EDMX 文件一起使用。
关于您返回用户名存储在"创建者"字段中的记录的目标。有很多方法可以解决这个问题。您可以使用 LINQ 创建查询,也可以自己编写存储过程并将其与 EDMX 文件一起导入(使用 EDMX 而不是代码优先的另一个优点(。
使用 LINQ 时,它看起来像这样:
public List<Record> GetAllRecordsByUserName(string credentials)
{
List<Record> recordList;
using (CustomEntities context = new CustomEntities())
{
IQueryable<Section> recordQuery = from records in context.Records
where records.UserName == credentials
select records;
recordList = recordQuery.ToList<Record>();
}
return recordList;
}
至于编写存储过程,您只需在 TSQL 中编写存储过程即可。生成EDMX文件后,您将右键单击屏幕并选择"导入功能"。从那里,您将找到您的存储过程,您可以选择自动将其映射到所需的对象,或者如果对象类型不存在,则创建新的复杂类型。这是一个非常强大的工具,它的性能比使用上面编写的 LINQ 语句更好。