我做了很多研究,包括SO,我似乎无法找到明确的方向.我目前有一个ASP.NET MVC3应用程序,其中一个服务层位于存储库之上.
在我的服务层,我有以下功能:
public class MyService{
public void CreateDebitRequest(int userId, int cardId, decimal Amount, .... )
{
//perform some sort of validation on parameters, save to database
}
public void CreateCreditRequest(.....)
}
//perform some sort of validation on parameters, save to database
}
public void CreateBatchFile()
{
//construct a file using a semi-complex process which could fail
//write the file to the server, which could fail
}
public PaymentTransaction ChargePaymentCard(int paymentCardId, decimal amount)
{
//validate customer is eligible for amount, …Run Code Online (Sandbox Code Playgroud) 我在MVC3中遇到了Entity Framework代码优先的问题.我正在遇到这个例外:
ObjectStateManager中已存在具有相同键的对象.ObjectStateManager无法使用相同的键跟踪多个对象.
在SO上多次解决这个问题,但在我的情况下我无法使用任何建议的解决方案.
这是一个代码示例:
FestORM.SaleMethod method = new FestORM.SaleMethod
{
Id = 2,
Name = "Test Sale Method"
};
FestContext context = new FestContext();
//everything works without this line:
string thisQueryWillMessThingsUp =
context.SaleMethods.Where(m => m.Id == 2).Single().Name;
context.Entry(method).State = System.Data.EntityState.Modified;
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
编辑澄清:我正在尝试更新数据库中已存在的对象.
没有代码中注明的查询,一切正常.在我的应用程序中,我的控制器正在实例化上下文,并且相同的上下文被传递给控制器使用的几个存储库 - 因此我无法简单地为初始查询操作使用不同的上下文.我试图删除实体在ObjectStateManager中被跟踪,但我似乎无法获得任何地方.我试图找出一个适用于这两种情况的解决方案:有时候我会更新一个由ObjectStateManager跟踪的对象,有时它会碰巧还没有被跟踪.
FWIW,我真正的存储库函数看起来像这样,就像上面的代码一样:
public void Update(T entity)
{
//works ONLY when entity is not tracked by ObjectStateManager
_context.Entry(entity).State = System.Data.EntityState.Modified;
}
public void SaveChanges()
{
_context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我一直在争吵太久了......
entity-framework repository code-first asp.net-mvc-3 dbcontext
我正在尝试捕获两个字符串之间的匹配项。
例如,我正在寻找出现在 Q 和 XYZ 之间的所有文本,使用“最快”匹配(不继续向外扩展)。这个字符串:
马戏团 Q 你好Q SOMETEXT XYZ今天是 XYZ 的一天 XYZ
应该返回:
Q 某些文本 XYZ
但相反,它返回:
Q 你好 Q SOMETEXT XYZ
这是我使用的表达式: Q.*?XYZ
回到左边太远了。当我在星号后面使用问号时,它在骑行方面工作正常。我怎样才能对左侧做同样的事情,并在我击中第一个左 Q 后停止,使其与右侧的工作相同?我已经尝试过http://msdn.microsoft.com/en-us/library/az24scfc.aspx 中的问号和其他符号,但有些东西我只是想不通。
我是一个正则表达式新手,因此对这方面的任何帮助将不胜感激!
这是我的意见:
xxx999xxx888xxx777xxx666yyy
xxx222xxx333xxx444xxx555yyy
这是表达式:
xxx.*xxx(?<matchString>(.(?!xxx.*xxx))*?)xxx.*yyy
Run Code Online (Sandbox Code Playgroud)
它返回444.
我希望它能同时返回444和777,但我不能随便找到它.
我有!排除,以便它只匹配左侧的最里面(当我只搜索一个结果时,这很有效,大部分时间都是这样).但是,我感觉这与它在此实例中跳过第一个结果的原因有关.我不知道从哪里开始.
我一直在这里测试: http: //regexlib.com/RETester.aspx(启用"SingleLine"和"Explicit Capture")
任何意见,将不胜感激!
c# ×3
.net ×2
non-greedy ×2
regex ×2
regex-greedy ×2
repository ×2
code-first ×1
dbcontext ×1
validation ×1