C# 尝试根据表单输入的错误将信息输入数据库列
我甚至不知道这个问题怎么说,所以请容忍我。如果需要,我会编辑 让我们从我的代码开始:C# 尝试根据表单输入的错误将信息输入数据库列,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,我甚至不知道这个问题怎么说,所以请容忍我。如果需要,我会编辑 让我们从我的代码开始: var assetMonth = "assest."+Month; var billableAssests = (from s in db.Assets where s.SystemPosition == 1 select s).ToList(); try {
var assetMonth = "assest."+Month;
var billableAssests = (from s in db.Assets
where s.SystemPosition == 1
select s).ToList();
try {
foreach (var assests in billableAssests)
{
assests.PreviousDateBilled = assests.LastDateBilled;
assests.LastDateBilled = today;
assetMonth = assests.MonthlyChargeRate; <===HERE
assests.RunnungLeaseTotal = assests.RunnungLeaseTotal + assests.MonthlyChargeRate;
if (assests.MonthBilled == null)
{
assests.MonthBilled = 1;
}
else
{
assests.MonthBilled = assests.MonthBilled + 1;
}
//db.Entry(billableAssests).State = EntityState.Modified;
db.SaveChanges();
}
}
嗯,你有两个选择 首先是重构您的模型,可能还有您的数据库,这样您就可以拥有一个月值集合,而不是12个月的字段。这将更容易更新,因为您可以使用传入的月份来确定您想要哪个条目(如果它存在),或者添加它(如果它不存在)
public class AssetMonth
{
string AssetTag { get;set;}
DateTime Month { get;set;} // DateTime would *probably* be the best choice for this
Decimal? MonthlyChargeRate { get;set;}
}
第二种方法是使用一种很好的老式开关
语句:
switch(Month) // I don't know what type this is; I'm assuming string.
{
case "Jan":
model.Jan = assets.MonthlyChargeRate;
break;
case "Feb":
model.Feb = assets.MonthlyChargeRate;
// etc.
}
第三,如果你真的很喜欢,你可以用反射来设定值
PropertyInfo prop = typeof(Asset).GetProperty(Month); // again, assuming string
prop.SetValue(model, assets.MonthlyChargeRage);
但我鼓励您重构模型。这将为您提供最佳设计,并消除对解决方案(如选项2和3)的需求 你能告诉我们你想插入的表格是什么样子吗?是的。我认为我们需要查看资产表(但我可能错了)。您需要向我们显示包含要我们插入的列的表/实体。谢谢。懒惰的我不想重构模型。但这是正确的处理方法。
PropertyInfo prop = typeof(Asset).GetProperty(Month); // again, assuming string
prop.SetValue(model, assets.MonthlyChargeRage);