小编glo*_*man的帖子

无法获得实体框架中导航属性更新的关系

我目前正在使用EF4.3和Code First.创建我的对象(通过我的视图 - 只使用自动生成的创建),但是当我尝试编辑对象时,它不会保存任何与我的导航属性完全相关的更改.我一直在阅读关系,但我不明白如何告诉我的背景,这种关系已经发生了变化.

这是我的实现的一些示例代码.

@* Snippet from my view where I link into my ViewModel. *@
<div class="row">
    <div class="editor-label">
        @Html.LabelFor(model => model.ManagerID)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.ManagerID, ViewBag.Manager as SelectList, String.Empty)
        @Html.ValidationMessageFor(model => model.ManagerID)
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

这是我的Controller实现(我的编辑的POST):

    [HttpPost]
    public ActionResult Edit(ProjectViewModel projectViewModel)
    {
        if (ModelState.IsValid)
        {
            Project project = new Project();
            project.ProjectID = projectViewModel.ProjectID;
            project.Name = projectViewModel.Name;
            project.ProjectManager = repository.GetUser(projectViewModel.ManagerID);
            repository.InsertOrUpdateProject(project);
            repository.Save();
            return RedirectToAction("Index");
        }
        ViewBag.Manager = new SelectList(repository.GetUsers(), "UserID", "FullName", projectViewModel.ManagerID);
        return View(projectViewModel);
    } …
Run Code Online (Sandbox Code Playgroud)

entity-framework code-first

6
推荐指数
2
解决办法
1万
查看次数

正则表达式、捕获组和单元测试的良好设计

在一个项目中,我正在尝试使用正则表达式来区分各种类型的句子,并将它们映射到函数来处理这些句子。

大多数这些句子处理函数从句子本身获取参数,由正则表达式中的捕获组解析出来。

例如:“我为 2 个 cookie 支付了 20 美元”与我的解析树(字典)中的一个正则表达式匹配。正则表达式将匹配提取 $20 作为组“价格”,和 2 作为组“金额”。目前我正在映射到正确的 Handler 函数并按如下方式调用它:

foreach(KeyValuePair<Regex, Type> pair in sentenceTypes)
{
    Match match = pair.Key.Match(text);
    if(match.Success)
    {
        IHandler handler = handlerFactory.CreateHandler(pair.Value);
        output = handler.Handle(match);
    }
}
Run Code Online (Sandbox Code Playgroud)

简单处理程序类的示例。

public class NoteCookiePriceHandler
    {
        public string Handle(Match match)
        {
            double payment = Convert.ToDouble(match.Result("${payment}"));
            int amount = Convert.ToInt32(match.Result("${amount}"));

            double price = payment / amount;
            return "The price is $" + price;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我试图用 Moq 设置一些单元测试来提供帮助,当我意识到我实际上无法模拟 Match 对象或 Regex 时。仔细考虑一下,设计总体上似乎有些缺陷,因为我依赖于正确解析命名组并将其传递给没有良好接口的 Handler 类。

我正在寻找有关更有效设计的建议,以用于将参数正确地传递给映射的处理程序函数/类,因为传递 Match …

c# regex unit-testing moq

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

标签 统计

c# ×1

code-first ×1

entity-framework ×1

moq ×1

regex ×1

unit-testing ×1