我目前正在使用ViewModels将我的Views与实际的Model结构分开.
例如,我有一个用户持久性实体和一个包含所有信息的MyProfile ViewModel,用户可以自己更改.对于从User到MyProfile的转换,我使用的是Automapper.
现在用户回复了他的(更改过的)信息后,我需要保存这些信息.但是ViewModel中的信息并不完整,当AutoMapper从ViewModel创建用户持久性实体时,重要信息会丢失.
我不想将此信息公开给视图层,尤其是隐藏的表单元素.
所以我需要一种方法将ViewModel合并到持久性实体中.我可以使用AutoMapper执行此操作,还是必须手动执行此操作?
例:
我的用户类包含ID,名字,姓氏,用户名和密码.用户应该只在他的个人资料中编辑他的名字和姓氏.因此,我的ProfileViewModel包含ID,名字和姓氏.从表单中回发信息后,Automapper从传输的ProfileViewModel创建一个User对象,在此对象中只设置ID,Firstname和Lastname.将此实体提供给我的存储库时,我丢失了用户名和密码信息.
我熟悉这个事实,我不应该在单元测试中使用依赖注入,所以我可以独立地对每个层进行单元测试.
不过,我想为我的控制器创建集成测试.因此,我需要从单元测试中将我的存储库注入控制器.
我遵循使用T4脚本的通用方法,为每个控制器创建一个测试类,包含每个ActionResult的测试方法.这个测试方法应该简单地调用方法,以确保没有异常抛出到表面.
由于使用此T4脚本,我无法手动将存储库提供给控制器.我需要利用依赖注入.
根据我以前的经验,这应该工作,但我一直得到错误:
Unable to get default constructor for class <<UnitTest>>
Run Code Online (Sandbox Code Playgroud)
我生成的类目前看起来像这样:
[TestClass]
public class TestControllersHomeController
{
private EL.NET.Web.Controllers.HomeController c;
//setup
public TestControllersHomeController(Project.Controllers.HomeController c)
{
this.c = c;
}
[ClassInitialize]
public void ClassInitialize()
{
var kernel = NinjectWebCommon.CreatePublicKernel();
kernel.Bind<TestControllersHomeController>().ToSelf();
kernel.Bind<Project.Controllers.HomeController>().ToSelf();
}
[TestMethod]
public void TestIndex()
{
var result = c.Index();
Assert.IsNotNull(result);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我已经发现,可以使用IKernel的GetService()方法加载存储库.但对于会员提供商,这不起作用.同样,我不想模拟提供程序,我想执行集成测试,所以我知道我的Controller方法是否抛出任何异常.
我有以下字符串的几个出现的数据:
<a href="default.asp?itemID=987">
Run Code Online (Sandbox Code Playgroud)
其中itemID总是不同的.我正在使用C#,我希望使用正则表达式获取所有这些itemID.
起初我试过这个
"<a href=\"default.asp?itemID=([0-9]*)\">"
Run Code Online (Sandbox Code Playgroud)
但问号是保留字符.我考虑使用@运算符来禁用字符转义.但仍有一些双引号确实需要逃避.那么我会去
"<a href=\"default.asp\\?itemID=([0-9]*)\">"
Run Code Online (Sandbox Code Playgroud)
应该翻译(作为一个字符串)
<a href="default.asp\?itemID=([0-9]*)">
Run Code Online (Sandbox Code Playgroud)
但是Regex.Match方法没有成功.我在这里尝试了相同的正则表达式并且它有效.我究竟做错了什么?
我正在使用数据库第一种方法和DbContext.我的数据模型中有几个继承结构(TPH).但是DbContext只为基类创建一个DbSet,而为子类创建没有.我应该如何检索指定子类的所有实体?
我无法根据映射标准编写查询,因为我必须从数据模型中删除这些字段.
我可以简单地将新的DbSet添加到Entities类(部分类)吗?
inheritance entity-framework-4 table-per-hierarchy database-first dbcontext
asp.net-mvc ×1
automapper ×1
c# ×1
dbcontext ×1
escaping ×1
inheritance ×1
ninject ×1
regex ×1
t4 ×1
unit-testing ×1
viewmodel ×1