我有以下方法:
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) 我有一个控制器动作,它接收一个整数和一个对象,包含各种属性,其中一个是对象的通用列表.当我使用填充列表将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是在收到的条件对象中,而不是在返回中.)
我猜这是一件非常简单的事情,我很想念,但我无法解决什么问题,任何帮助都非常感激.
我正在尝试使用流畅的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)
对于稍微模糊的问题道歉,我感觉我只是以错误的方式接近事情而且任何指针都会非常感激!
我正在尝试创建一个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) 我有一个公共交通消费者服务设置与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)
我在两个地方设置并发消费者限制,因为我不确定我是否需要在默认或总线配置中设置它,并且消费者通过统一注册 - 我省略了消费者订阅,因为所有订阅者都是接收.
我有点困惑,我是否需要设置其他任何东西,或者我是否需要更改我设置配置的顺序.
任何帮助非常感谢.
我有一组来自不同来源的付款对象,我想在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) 我正在尝试在流畅的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)
在此先感谢您的任何帮助.
c# ×6
json ×2
nhibernate ×2
.net ×1
csvhelper ×1
jquery ×1
json.net ×1
masstransit ×1
rabbitmq ×1