小编Jos*_*osh的帖子

如何将服务层验证消息传递回调用方?

我做了很多研究,包括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)

c# validation repository service-layer asp.net-mvc-3

9
推荐指数
2
解决办法
4309
查看次数

实体框架代码优先:"ObjectStateManager无法跟踪具有相同密钥的多个对象."

我在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

5
推荐指数
1
解决办法
6588
查看次数

仅左侧的正则表达式贪婪(.net)

我正在尝试捕获两个字符串之间的匹配项。

例如,我正在寻找出现在 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 中的问号和其他符号,但有些东西我只是想不通。

我是一个正则表达式新手,因此对这方面的任何帮助将不胜感激!

.net c# regex non-greedy regex-greedy

1
推荐指数
1
解决办法
1540
查看次数

为什么这个正则表达式只返回一个匹配?

这是我的意见:

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")

任何意见,将不胜感激!

.net c# regex non-greedy regex-greedy

0
推荐指数
1
解决办法
367
查看次数