我们可以使用HTML视图的默认文件夹约定的MVC应用程序,但是我们想要设置备用"服务"文件夹,其中控制器仅用于返回xml或json的Web服务.
因此路由"/ Services/Tasks/List"将路由到"/Services/TaskService.cs",而"/ Tasks/List"将路由到标准"/Controllers/TaskController.cs"
我们希望将服务控制器与视图控制器分开.我们认为区域或使用其他项目不会起作用.什么是最好的方法来解决这个问题?
使用EF4,是否可以获取生成的更新/插入SQL而不是执行它......就像您可以在运行之前查看查询SQL一样.
原因是,我有一组执行SQL命令的辅助函数.例如...
Decrement<Category>("ProductCount", categoryID);
SetNull<Product>("CategoryID", productID);
Run Code Online (Sandbox Code Playgroud)
哪个产生......
UPDATE Categories
SET ProductCount = ProductCount - 1
WHERE CategoryID = @CategoryID;
UPDATE Products
SET CategoryID = NULL
WHERE CategoryID = @ProductID;
Run Code Online (Sandbox Code Playgroud)
我通常在每个操作中运行几个命令,因此在每个辅助函数调用时,都会生成并存储SQL.当我调用SaveChanges()时,所有命令都是一次运行的.
唯一的问题是EF在幕后单独运行命令,然后我立即运行其他命令.将所有内容作为单个命令运行是理想的.
在我的数据库设计中使用高级冗余非规范化数据来提高性能.我经常会存储通常需要加入或计算的数据.例如,如果我有一个User表和一个Task表,我会在每个Task记录中冗余地存储Username和UserDisplayName.另一个例子是存储聚合,例如将TaskCount存储在User表中.
这非常适合性能,因为应用程序具有比插入,更新或删除操作更多的读取,并且因为某些值(如用户名)很少更改.然而,最大的缺点是必须通过应用程序代码或触发器强制执行完整性.更新可能会非常麻烦.
我的问题是这可以在SQL Server 2005/2010中自动完成...也许通过持久/永久视图.有人会推荐另一种可能的解决方案或技术 我听说基于文档的数据库(如CouchDB和MongoDB)可以更有效地处理非规范化数据.
库或代码是否可用于从lambda表达式创建SQL Update语句?我们希望使用强类型的lambda表达式来进行更新,而不是事先调用对象或使用字符串.我在考虑这样的事情.
Update<Task>(
u => u.UserID = 1, u.TaskCount += 1, //Update
w => w.Priority != "High" && (w.Status != "Complete" || w.Status == null) //Where
);
Run Code Online (Sandbox Code Playgroud)
哪个会粗略地翻译成..
UPDATE Tasks SET UserID = 1, TaskCount = TaskCount + 1
WHERE Priority <> "High" AND (Status <> "Complete" OR Status = null)
Run Code Online (Sandbox Code Playgroud)
我应该提到我们目前正在使用Entity Framework和Postgres.