小编Dan*_* T.的帖子

当cascade是delete-all-orphan时,如何更改NHibernate中孩子的父级?

我有两个双向一对多关系的实体:

public class Storage
{
    public IList<Box> Boxes { get; set; }
}

public class Box
{
    public Storage CurrentStorage { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和映射:

<class name="Storage">
    <bag name="Boxes" cascade="all-delete-orphan" inverse="true">
        <key column="Storage_Id" />
        <one-to-many class="Box" />
    </bag>
</class>

<class name="Box">
    <many-to-one name="CurrentStorage" column="Storage_Id" />
</class>
Run Code Online (Sandbox Code Playgroud)

A Storage可以有很多Boxes,但Box只能属于一个Storage.我将它们映射,以便一对多有一个级联all-delete-orphan.

当我尝试更换Box时,我的问题就出现了Storage.假设我已经运行了这段代码:

var storage1 = new Storage();
var storage2 = new Storage();
storage1.Boxes.Add(new Box());

Session.Create(storage1);
Session.Create(storage2);
Run Code Online (Sandbox Code Playgroud)

以下代码将给我一个例外:

// get the first …
Run Code Online (Sandbox Code Playgroud)

nhibernate cascade nhibernate-mapping

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

如何在Ninject.Web.Mvc中使用AutoMapper?

建立

我有一个AutoMapperConfiguration静态类来设置AutoMapper映射:

static class AutoMapperConfiguration()
{
    internal static void SetupMappings()
    {
        Mapper.CreateMap<long, Category>.ConvertUsing<IdToEntityConverter<Category>>();
    }
}
Run Code Online (Sandbox Code Playgroud)

IdToEntityConverter<T>是一个如下所示的自定义ITypeConverter:

class IdToEntityConverter<T> : ITypeConverter<long, T> where T : Entity
{
    private readonly IRepository _repo;

    public IdToEntityConverter(IRepository repo)
    {
        _repo = repo;
    }

    public T Convert(ResolutionContext context)
    {
        return _repo.GetSingle<T>(context.SourceValue);
    }
}
Run Code Online (Sandbox Code Playgroud)

IdToEntityConverterIRepository在其构造函数中接受一个,以便通过命中数据库将ID转换回实际实体.请注意它没有默认构造函数.

在我的ASP.NET中Global.asax,这就是我所拥有的OnApplicationStarted()CreateKernel():

protected override void OnApplicationStarted()
{
    // stuff that's required by MVC
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);

    // our setup stuff …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection ninject inversion-of-control automapper

12
推荐指数
2
解决办法
4437
查看次数

如何使用AutoMapper将多个子类映射到一个类中?

假设我有三个类是基类的子类:

public class BaseClass
{
    public string BaseName { get; set; }
}

public class Subclass1 : BaseClass
{
    public string SubName1 { get; set; }
}

public class Subclass2 : BaseClass
{
    public string SubName2 { get; set; }
}

public class Subclass3 : BaseClass
{
    public string SubName3 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想将这些映射到ViewModel类,如下所示:

public class ViewModel
{
    public string BaseName { get; set; }
    public string SubName1 { get; set; }
    public string SubName2 { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# subclass viewmodel automapper

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

如何在ASP.NET MVC中动态调整图像大小?

如何在ASP.NET MVC中动态调整图像大小?

背景

我正在尝试从服务器上已有的图像自动创建缩略图.在ASP.NET Webforms中,我创建了一个HTTPHandler来执行此操作并在web.configfor for all images扩展中添加动词以通过处理程序.处理程序很好,如果你想要原始图像,你可以使用一个典型的图像标记:

<img src="pic.jpg"/>

但如果你想要一个调整大小的图像,你可以使用:

<img src="pic.jpg?width=320&height=240"/>

有没有办法在ASP.NET MVC中复制相同的行为?

asp.net-mvc resize image-manipulation image dynamic

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

我应该将验证逻辑放在POCO中吗?

假设我有一个像这样的POCO:

public class Name
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

FirstName和LastName不能为null.我应该添加这样的方法:

public List<Error> Validate()
{
    var errors = new List<Error>();

    if (String.IsNullOrEmpty(FirstName))
        errors.Add(new Error("FirstName", "You must fill out first name."));
    if (String.IsNullOrEmpty(LastName))
        errors.Add(new Error("LastName", "You must fill out last name."));
}
Run Code Online (Sandbox Code Playgroud)

where Error是包含a的结构NameValueDictionary.这是一种很好的做事方式吗?我可能会发现存储库存在问题,有人试图保存此POCO而不先运行它Validate().

c# validation asp.net-mvc poco

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

如何忽略基于NUnit中另一个测试的测试?

我正在为数据库操作编写一些NUnit测试.显然,如果Add()失败,那么Get()也会失败.然而,它看起来既欺骗Add()Get()失败,因为看起来有两个问题而不是一个问题.

有没有办法为测试运行指定"顺序",因为如果第一次测试失败,则忽略以下测试?

在同一行中,有没有办法自己订购单元测试类?例如,我想在测试来自UI的往返数据之前首先运行我的基本数据库操作测试.

注意:这与测试相互依赖有点不同,更像是在运行一堆测试之前确保某些东西先工作.例如,如果您无法首先连接到数据库,那么运行大量数据库操作会浪费时间.

编辑:似乎有些人忽略了这一点.我不这样做:

[Test]
public void AddTest()
{
    db.Add(someData);
}

[Test]
public void GetTest()
{
    db.Get(someData);
    Assert.That(data was retrieved successfully);
}
Run Code Online (Sandbox Code Playgroud)

相反,我这样做:

[Test]
public void AddTest()
{
    db.Add(someData);
}

[Test]
public void GetTest()
{
    // need some way here to ensure that db.Add() can actually be performed successfully
    db.Add(someData);
    db.Get(somedata);
    Assert.That(data was retrieved successfully);
}
Run Code Online (Sandbox Code Playgroud)

换句话说,我想确保在我可以测试是否可以检索数据之前首先添加数据.人们假设我使用第一次测试的数据来通过第二次测试,但事实并非如此.我正在尝试确保在尝试依赖它的另一个操作之前可以执行一个操作.

正如我已经说过的,您需要确保在运行数据库操作之前可以连接到数据库.或者您可以在执行文件操作之前打开文件.或者在测试API调用之前连接到服务器.或者......你明白了.

nunit unit-testing

11
推荐指数
3
解决办法
2893
查看次数

如何使用AutoMapper将对象列表转换为整数列表?

我有一个Student对象:

public class Student
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

一个Classroom对象:

public class Classroom
{
    public List<Student> Students { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想使用AutoMapper将学生列表转换为学生ID列表:

public class ClassroomDTO
{
    public List<int> StudentIds { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何配置AutoMapper以执行此转换?

回答:

为了扩展我的问题和Jimmy的答案,这就是我最终做的事情:

Mapper.CreateMap<Student, int>().ConvertUsing(x => x.Id);
Mapper.CreateMap<Classroom, ClassroomDTO>()
      .ForMember(x => x.StudentIds, y => y.MapFrom(z => z.Students));
Run Code Online (Sandbox Code Playgroud)

AutoMapper非常聪明,可以完成剩下的工作.

flatten automapper

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

我如何单元测试仅由NHibernate设置的受保护属性?

我正在使用NHibernate来持久保存这个实体:

public class Store
{
    public int Id { get; protected set; }
    public int Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

请注意该Id属性如何具有受保护的setter.这是为了防止用户更改Idwhile仍然允许NHibernate在将Id其保存到数据库时分配它.

在我的一个单元测试中,我使用Moq和以下代码来模拟我的存储库:

var mock = new Mock<IRepository>();
mock.Setup(x => x.GetById<Store>(It.IsAny<int>()))
    .Returns(new Store { Value = "Walmart" }); // can't set the ID here

var store = Repository.GetById<Store>(5);
Assert.That(store.Id == 5);
Run Code Online (Sandbox Code Playgroud)

当我告诉Moq返回一个新Store实例时,我无法分配ID,并且单元测试失败.我该如何对这个属性进行单元测试?我不想更改属性的访问级别,因为我不希望用户手动更改它,但这正是我必须要做的,以便测试它.

c# nhibernate nunit unit-testing moq

11
推荐指数
3
解决办法
7554
查看次数

有没有办法在ASP.NET MVC 3 RC2中禁用JSON ModelBinder?

在ASP.NET MVC 3 RC2中,默认的ModelBinder将自动解析请求正文(如果Content-Type设置为)application/json.问题是,这留下Request.InputStream了流的末尾.这意味着如果您尝试使用自己的代码读取输入流,则首先将其重置为开头:

// client sends HTTP request with Content-Type: application/json and a JSON
// string in the body

// requestBody is null because the stream is already at the end
var requestBody = new StreamReader(Request.InputStream).ReadToEnd();

// resets the position back to the beginning of the input stream
var reader = new StreamReader(Request.InputStream);
reader.BaseStream.Position = 0;
var requestBody = reader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

因为我正在使用Json.NET序列化/反序列化,所以我想禁用默认的ModelBinder进行额外的解析.有没有办法做到这一点?

c# asp.net-mvc httpwebrequest modelbinders asp.net-mvc-3

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

ColdFusion中静态方法的等价物是什么?

在C#中,我创建了静态方法来帮助我执行简单的操作.例如:

public static class StringHelper
{
    public static string Reverse(string input)
    {
        // reverse string
        return reversedInput;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在控制器中,我会通过简单地使用:

StringHelper.Reverse(input);
Run Code Online (Sandbox Code Playgroud)

现在我正在使用ColdFusion和Model Glue,我想做同样的事情.但是,似乎ColdFusion中没有静态方法的概念.如果我像这样创建一个CFC:

component StringHelper
{
    public string function Reverse(string input)
    {
        // reverse string
        return reversedInput;
    }
}
Run Code Online (Sandbox Code Playgroud)

我是否可以通过StringHelper在控制器中创建实例来调用此方法,如下所示:

component Controller
{
    public void function Reverse()
    {
        var input = event.getValue("input");
        var stringHelper = new StringHelper();
        var reversedString = stringHelper.Reverse(input);
        event.setValue("reversedstring", reversedString);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者在某些地方我可以放置"静态"CFC,框架将在后台创建一个实例,这样我就可以使用它,好像它是静态的,有点像helpers文件夹的工作方式?

c# coldfusion static coldfusion-9

11
推荐指数
2
解决办法
2106
查看次数