小编Ian*_*ill的帖子

CsvHelper没有向内存流写任何东西

我有以下方法:

public byte[] WriteCsvWithHeaderToMemory<T>(IEnumerable<T> records) where T : class
{
    using (var memoryStream = new MemoryStream())
    using (var streamWriter = new StreamWriter(memoryStream))
    using (var csvWriter = new CsvWriter(streamWriter))
    {
        csvWriter.WriteRecords<T>(records);

        return memoryStream.ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用对象列表调用哪个 - 最终来自数据库,但由于某些东西不起作用,我只是填充静态集合.传递的对象如下:

using CsvHelper.Configuration;

namespace Application.Models.ViewModels
{
    public class Model
    {
        [CsvField(Name = "Field 1", Ignore = false)]
        public string Field1 { get; set; }

        [CsvField(Name = "Statistic 1", Ignore = false)]
        public int Stat1{ get; set; }

        [CsvField(Name = "Statistic 2", Ignore = false)] …
Run Code Online (Sandbox Code Playgroud)

c# csvhelper

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

Json空数组在MVC中反序列化为null

我有一个控制器动作,它接收一个整数和一个对象,包含各种属性,其中一个是对象的通用列表.当我使用填充列表将JSON发布到操作时,一切都正确映射,我得到一个包含我发布的对象的列表.但是,如果数组为空,则MVC操作会将该属性绑定到空列表的null intead.我希望空数组映射到空数组而不是空数,因为在这种情况下空数组意味着集合中没有任何内容,而null意味着应该检查数据库以查看以前是否有任何内容保存在集合中,但我无法弄清楚我需要更改以使其正确映射.我们使用Json.Net为返回对象进行对象序列化,但我认为它不会用于模型绑定上的对象反序列化.

传递的对象:

public class ObjectInList
{
    public decimal Value1 { get; set; }
    public decimal Value2 { get; set; }
}

public class Criteria
{
    public decimal? ANullableNumber { get; set; }
    public IList<ObjectInList> ObjectsList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Json请求:"{\"id \":137,\"criteria \":{\"ObjectsList \":[]}}"

控制器动作:

public ActionResult ProcessCriteria(int id, Criteria criteria)
{
    return Json(_service.ProcessCriteria(id, criteria));
}
Run Code Online (Sandbox Code Playgroud)

我在控制器操作中获取null而不是条件对象中的空列表.无论我是否为其他属性发送空值,都会发生这种情况.不确定它是否属于IList而不是IEnumerable?(包装服务调用的Json方法是我们的​​包装器,它使用Json.Net返回一个json结果来序列化响应 - null是在收到的条件对象中,而不是在返回中.)

我猜这是一件非常简单的事情,我很想念,但我无法解决什么问题,任何帮助都非常感激.

c# json json.net asp.net-mvc-3

23
推荐指数
2
解决办法
7444
查看次数

使用Fluent NHibernate批量插入实体集合

我正在尝试使用流畅的NHibernate将大量对象插入到表中,使用调用来保存或更新在foreach循环中从集合中传递每个实体.我已经将批量大小设置为集合的大小,但是我已经在Ayende的博客上看到,不建议将其设置为大值,所以我将其限制为250,但是当我在NHProf中查看集合时,我查看插入语句流(该集合大约是20000个项目),而不是一组批量插入调用.

这似乎非常低效,并且花费的时间比我期望的查询本质上非常基本 - 将值插入25列(是的,这是一个可以做得更好的地方,但它是遗留数据库)我现在仍然坚持到SQL Server 2008数据库 - 所以我只能假设我做错了.

是否有推荐的方法使用NHibernate插入大型实体集合?使用Save over SaveOrUpdate可以提高效率吗?

add方法的代码 - SetBatchSize调用是批处理上限为250的位置,或者如果小于250则设置为集合大小:

public void Add(IEnumerable<TEntity> entities)
{
    var session = GetCurrentSession();
    using (var transaction = session.BeginTransaction())
    {
        entities = entities.ToList();

        session.SetBatchSize(SetBatchSize(entities.Count()));

        foreach (var entity in entities)
            session.SaveOrUpdate(entity);

        transaction.Commit();
    }
}
Run Code Online (Sandbox Code Playgroud)

对于稍微模糊的问题道歉,我感觉我只是以错误的方式接近事情而且任何指针都会非常感激!

c# nhibernate fluent-nhibernate sql-server-2008

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

在jQuery.get之后重新加载页面到MVC控制器操作

我正在尝试创建一个MVC视图,它将在许多表中显示一些数据,然后通过点击要更新的表上的提交按钮来更新数据.在表更新时,表中的记录可以从一个表移动到下一个表(这都是在服务层而不是视图中处理的).目前,我从控制器呈现视图,并且每个表是向用户显示数据的单独局部视图.我的更新被jQuery方法截获,该方法从表中捕获数据,然后将其作为JSON字符串发布到控制器.然后控制器反序列化JSON并将其发布到服务层.

我想要发生的是控制器返回一个视图结果,它将刷新整个页面,更新每个表,以便显示相应的记录.我的所有工作都与页面刷新有关 - 我的控制器返回一个视图结果,并且视图和模型在返回时都是正确的,但页面并没有像我期望的那样刷新.

我想我错过了一些愚蠢的东西,但是在那一刻我看不出它是什么......

代码 -

视图上的jQuery脚本:

function DailyPaymentIn(payInId, payOut, notes) {
  this.PayInId = payInId;
  this.PayOut = payOut;
  this.Notes = notes;
}

$(function () {
  $('#update-yes-payments').submit(function (e) {
    e.preventDefault();

    var payments = new Array();

    $('#payment-table-yes tbody tr').each(function () {
      var payInId = $('input#PayInId', this).val();
      var payOut = $('input#PayOut', this).is(':checked');
      var notes = $('input#payment_Notes', this).val();

      payments.push(new DailyPaymentIn(payInId, payOut, notes));
    });

    $.get('/payments/UpdatePayments', { json: JSON.stringify(payments) });
  });
});
Run Code Online (Sandbox Code Playgroud)

以上是将值捕获到对象中,然后将其序列化为JSON.这一切都正常 - 数据被发送到控制器方法,并在到达时呈现正确的形状.我已经在实验中换了帖子而没有任何运气.

控制器方法:

呈现数据的方法:

[HttpPost]
public ViewResult PayInAdmin(PayInAdminModel model)
{
    var payments …
Run Code Online (Sandbox Code Playgroud)

c# jquery json asp.net-mvc-3

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

MassTransit封顶消息率为10

我有一个公共交通消费者服务设置与RabbitMQ一起工作,我无法弄清楚如何提高消费者的速度 - 似乎很难限制每秒收到的10条消息.

我已尝试过此处列出的步骤:https://groups.google.com/forum/#! msg/masstransit-discuss/plP4n2sixrY/xfORgTPqcwsJ,但没有成功 - 将预取和并发使用者设置为25只会增加已确认的消息,但它不会增加消息的下载速率.

我的配置如下:

ServiceBusFactory.ConfigureDefaultSettings(x =>
    {
        x.SetConcurrentReceiverLimit(25);
        x.SetConcurrentConsumerLimit(25);
    });

_bus = ServiceBusFactory.New(
    sbc =>
        {
            sbc.UseRabbitMq(x => 
                x.ConfigureHost(
                    "rabbitmq://localhost/Dev/consume?prefetch=25",
                    y =>
                        {
                            y.SetUsername(config.Username);
                            y.SetPassword(config.Password);
                        }));
            sbc.UseLog4Net();
            sbc.ReceiveFrom("rabbitmq://localhost/Dev/consume?prefetch=25");
            sbc.Subscribe(x => RegisterConsumers(x, container));
            sbc.UseJsonSerializer();
            sbc.SetConcurrentConsumerLimit(25);
        });
Run Code Online (Sandbox Code Playgroud)

我在两个地方设置并发消费者限制,因为我不确定我是否需要在默认或总线配置中设置它,并且消费者通过统一注册 - 我省略了消费者订阅,因为所有订阅者都是接收.

我有点困惑,我是否需要设置其他任何东西,或者我是否需要更改我设置配置的顺序.

任何帮助非常感谢.

masstransit rabbitmq

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

使用FluentNHibernate进行每类继承的表 - 身份生成

我有一组来自不同来源的付款对象,我想在NHibernate中使用TPC继承.所有这些对象的基础是支付处理器(因此所有对象都具有一致的格式),但是数据库中没有基类的表示.我想我的映射已经解决了,除了我在尝试插入时抛出异常的事实 - "不能使用带有<union-subclass>映射的身份列密钥生成:<EntityName>"

类别:

public class BasePayment
{
    public virtual int Id { get; set; }
    public virtual PaymentSource Source { get; set; }
    public virtual DateTime Date { get; set; }
    public virtual decimal Amount { get; set; }
}

public class SubPayment : BasePayment
{
}
Run Code Online (Sandbox Code Playgroud)

映射:

public class BasePaymentMap : ClassMap<BasePayment>
{
    public BasePaymentMap()
    {
        UseUnionSubclassForInheritanceMapping();
        DiscriminateSubClassesOnColumn("Source");
        Id(m => m.Id);
        Map(m => m.Source);
        Map(m => m.Amount);
        Map(m => m.Date);
    }
}

public class SubPaymentMap : SubclassMap<SubPayment>
{ …
Run Code Online (Sandbox Code Playgroud)

c# fluent-nhibernate

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

流畅的Nhibernate继承会抛出索引超出范围的异常

我正在尝试在流畅的nhibernate中实现继承,但即使是最简单的映射也会抛出异常:此SqlParameterCollection的索引1无效,Count = 1.

我传递的映射是我可以做的基本映射,只映射Id,源和数量,但是传递给集合的唯一参数是数量,而不是源(我的鉴别器)和我正在抛出异常.我本来想让我的鉴别器成为一个枚举,但由于我无法得到任何东西,我为了简单起见,我把它变成了一个字符串.

虽然子类目前没有向对象添加任何其他功能,但其他人会,这是最基本的版本所以我认为这将是最简单的...

阅读这个错误,问题通常是由于在基类和子类中都有一个映射的属性,但据我所知,情况并非如此.任何人都可以指出我做错了什么,因为我有点亏.

类别:

public class BasePayment
{
    public virtual int Id { get; set; }
    public virtual string Source { get; set; }
    public virtual decimal Amount { get; set; }
}

public class SubPayment : BasePayment
{
}
Run Code Online (Sandbox Code Playgroud)

映射:

public class BasePaymentMap : ClassMap<BasePayment>
{
    public BasePaymentMap()
    {
        DiscriminateSubClassesOnColumn("Source");
        Table("BasePayments")
        Id(m => m.Id);
        Map(m => m.Source);
        Map(m => m.Amount);
    }
}

public class SubPaymentMap : SubclassMap<SubPayment>
{
    public SubPaymentMap()
    {
        DiscriminatorValue("SourceX");
    }
}
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的任何帮助.

.net c# nhibernate fluent-nhibernate

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