我希望能够在应用程序中加载任何页面的任何时候运行脚本.有什么地方我可以简单地添加这个吗?或者我是否必须在每个页面加载中添加代码?
我有一个对象列表,我想更新其中一个对象中的特定成员变量.我知道LINQ是专为查询而设计的,并不意味着更新不可变数据列表.实现这一目标的最佳方法是什么?如果效率不高,我不需要使用LINQ作为解决方案.
创建Update扩展方法是否有效?如果是这样,我该怎么做呢?
EXAMPLE:
(from trade in CrudeBalancedList
where trade.Date.Month == monthIndex
select trade).Update(
trade => trade.Buy += optionQty);
Run Code Online (Sandbox Code Playgroud) 换句话说,以下"光标"方法是否有效:
LastMax
"SELECT * FROM MyTable WHERE Id > {0}", LastMax
为了使其工作,我必须确保我在步骤1中没有得到的每一行都有一个大于的Id LastMax
.这是保证,还是我可以遇到奇怪的竞争条件?
我正在研究的ASP.NET项目有3层; UI,BLL和DAL.我想知道UI是否可以接受将lambda表达式传递给BLL,或者UI是否应该传递参数,而Service方法应该使用这些参数来构造lambda表达式?这是一个显示两个senarios的示例类.
public class JobService
{
IRepository<Job> _repository;
public JobService(IRepository<Job> repository)
{
_repository = repository;
}
public Job GetJob(int jobID)
{
return _repository.Get(x => x.JobID == jobID).FirstOrDefault();
}
public IEnumerable<Job> Get(Expression<Func<Job, bool>> predicate)
{
return _repository.Get(predicate);
}
}
Run Code Online (Sandbox Code Playgroud)
对于上面的类,UI可以调用以下内容:
JobService jobService = new JobService(new Repository<Job>());
Job job = jobService.Get(x => x.JobID == 1).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
还是应该只允许调用GetJob(int jobID)?
这是一个简单的例子,我的问题一般是,如果UI层能够将lambda表达式传递到服务层而不是调用特定的方法吗?
如果我有以下内容,实际上对于任何检查IsNullOrEmpty并且它变为空的字符串,应该抛出什么样的异常类型,并且它不是方法的参数?
我总是很难选择异常类型,因为它们中有很多这么多.这只是从web.config获取一个值并检查SandboxSoapApiUsername是否返回空.
if(string.IsNullOrEmpty(ConfigUtility.SandboxSoapApiUsername))
throw new WTF do I throw here??? ahhh
Run Code Online (Sandbox Code Playgroud)
它可能取决于使用/上下文对吗?好吧,我将使用返回的字符串来设置类私有字段.所以我需要在过程的早期检查它是否为空字符串而不是以后(而不是依赖其他代码来检查与私有字段相关的属性,我将设置ConfigUtility.SandboxSoapApiUsername).
由于我将每个ConfigUtility.MEthodName设置为此类的属性将在SOAP请求中使用,我认为可能UriFormatException在这里是合适的,即使这不是Uri?
我们目前正在做一个Web应用程序,其中一个功能是由用户创建事件.用户或管理员稍后可以删除这些事件.但是,客户端要求事件不是从数据库中实际删除,而是标记为已删除.用户应该只能看到未删除的事件,但管理员也应该能够浏览已删除的事件.这就是真正的功能.
现在我建议我们只需添加一个名为"status"的额外列,它将具有几个有效值:ACTIVE和DELETED.通过这种方式,我们可以区分正常(活动)和已删除事件,并创建非常简单的查询(SELECT*FROM EVENTS WHERE STATUS ='ACTIVE').然而,我的同事不同意.他指出,无论现在活动事件和已删除事件是否共享相同信息(因此它们可以存储在同一个表中),以后的需求,我的更改和客户端将需要存储有关已删除事件的一些其他信息(比如删除日期,谁删除了它,为什么要删除它 - 有点评论).他说,为了在将来满足这些要求,我们必须在EVENTS表中添加其他列,这些列将保存特定于已删除事件的数据,而不是活动事件.他提出了一个解决方案,其中创建了与EVENTS表具有相同模式的附加表(如DELETED_EVENTS).每个已删除的事件都将从EVENTS表中进行物理删除,并移至DELETED_EVENTS表.
我强烈反对他的想法.它不仅会使SQL查询更复杂,效率更低,而且完全违背了YAGNI.我也不同意他的观点,如果未来需求发生变化,我的想法将使我们在EVENTS表中创建额外的(不可为空)列.在我的场景中,我只需创建新表,如DELETED_EVENTS_DATA(将保存那些额外的存档数据),并在EVENTS表中添加引用键,以维护EVETNS和DELETED_EVENTS_DATA表之间的一对一关系.
然而,由于两个通常在软件和数据库设计上有相似观点的开发人员对于如何在数据库级别设计这些需求有如此截然不同的看法,我感到很困惑.我认为我们可能都朝着错误的方向前进,还有另一个(第三个)解决方案?或者只有一种替代方案?你如何设计这种要求?有关如何正确完成的任何模式或指导方针吗?任何帮助将深表感谢
我想知道是否应该创建适用于对象级别的扩展方法,或者它们是否应该位于类层次结构中的较低点.我的意思是:
public static string SafeToString(this Object o) {
if (o == null || o is System.DBNull)
return "";
else {
if (o is string)
return (string)o;
else
return "";
}
}
public static int SafeToInt(this Object o) {
if (o == null || o is System.DBNull)
return 0;
else {
if (o.IsNumeric())
return Convert.ToInt32(o);
else
return 0;
}
}
//same for double.. etc
Run Code Online (Sandbox Code Playgroud)
我编写了这些方法,因为我必须处理很多数据库数据(来自OleDbDataReader),这些数据可以为null(不应该),因为底层数据库很可能非常宽松,列可能为null.为了让我的生活更轻松,我想出了那些扩展方法.
我想知道的是这是好风格,可接受的风格还是坏风格.我有点担心它,因为它有点"污染"对象类.
提前谢谢你和最好的问候:)
基督教
PS我没有故意将其标记为"主观".
我正在研究的一个项目涉及重构一个C#Com对象,它作为一些Sql 2005数据库的数据库访问层.
现有代码的作者使用字符串和许多if语句手动构建了所有sql查询,以构造相当复杂的sql语句(~10个连接,> 10个子选择,~15-25 where条件和GroupBy).基表始终是相同的,但连接,条件和分组的结构取决于传递给我的类/方法的一组参数.
像这样构建sql查询确实有效,但它显然不是一个非常优雅的解决方案(而且很难阅读/理解和维护)...我可以自己写一个简单的"querybuilder",但我很确定我不是第一个遇到这种问题的人,因此我的问题是:
我正在寻找关于在MVC应用程序中使用Entity Framework Code-First时验证逻辑的"最佳"位置的建议,例如对实体的重复检查.
使用一个简单的例子:
public class JobRole
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
规则是"名称"字段必须是唯一的.
当我添加一个新的JobRole时,很容易在Job Role Repository中运行一个名称尚不存在的检查.
但是,如果用户编辑现有JobRole,并意外将名称设置为已存在的名称,我该如何检查?
问题是存储库中不需要"更新"方法,因为作业角色实体将自动检测更改,因此在尝试保存之前没有合理的位置来执行此检查.
到目前为止,我考虑了两个选项:
两者都不是真的很理想.使用ValidateEntry似乎相当晚(在保存之前)并且难以测试.使用服务可能会有人忘记从控制器调用它,让重复的数据通过.
有没有更好的办法?
.net validation asp.net-mvc design-patterns entity-framework
我正在构建标准的3层ASP.NET Web应用程序,但我在努力去做某些事情 - 特别是处理异常.
我试图在网上浏览一些例子,但找不到任何一个整个项目,显示一切如何链接在一起.
在我的数据层中,我正在连接到SQL Server并做一些事情.我知道我需要捕获可能因此而引发的异常,但我不知道该在哪里做.
根据我的阅读,我应该在UI层中进行,但在这种情况下,我不确定如何确保与数据库的连接已关闭.是否有人能够澄清如何做到这一点?此外,如果有人知道我在哪里可以找到一个示例3层Web应用程序,该应用程序遵循最佳实践,也会很棒.
谢谢
.net ×6
c# ×6
asp.net ×3
linq ×3
sql-server ×3
sql ×2
.net-3.5 ×1
3-tier ×1
architecture ×1
asp.net-mvc ×1
data-access ×1
database ×1
ienumerable ×1
validation ×1