我正在开发一个使用MvcScaffolding构建快速CRUD界面的项目(非常感谢Steven Sanderson),但我在添加两个“代码优先”字段时遇到了麻烦(我通常在SQL Server中工作并且知道关于C#)。
我想为SQL等效的DEFAULT (getdate())
添加一个列,并使用varchar字段来表示通过项目上的表单身份验证登录的用户的名称(我相信这是存储{{ 1}},但我不确定。)
最终目标是允许用户登录;创造一个新纪录&保存;然后列表/索引页面只返回其用户名存储在HttpContext.Current.User.Identity.Name
字段中的记录(在SQL中,类似CreatedBy
)。
任何建议都赞赏!
答案 0 :(得分:1)
我感觉到你的痛苦。我记得自己遇到过这个问题。
令人遗憾和简单的答案是,您可以使用Code First的默认注释。 Code First还有很多不足之处。
以下是Entity Framework提供的所有可用注释的列表。你可以看到它仍然有点受限。
http://msdn.microsoft.com/en-us/library/gg197525(v=VS.103).aspx
使用Entity Framework时,我自己依赖于使用从头创建的数据库生成的简单EDMX文件。这使您不必担心编写所有CRUD语句,并且仍然可以控制小事情。
就MVC Scaffolding而言,EDMX文件的工作原理与Code First模型完全相同。我是MVC Scaffolding的忠实粉丝,我将它与EDMX文件一起用于多个项目。
关于返回其用户名存储在CreatedBy字段中的记录的目标。有很多方法可以解决这个问题。您可以使用LINQ创建查询,也可以自己编写存储过程并使用EDMX文件导入(另一个优点是在Code First上使用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语句表现更好。