I have database table object which is:
And I have a view model whcih is :
Now I need to save TreeviewItemViewModel to the nth Level. But my below method only goes to level 3. How can I go to nth Level to save child and parent objects
Repository method to save and update object:
Save function to save objects
C#:
[Table("CampaignRuleSetup")]
public class CampaignRuleSetup
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int ParentId { get; set; }
public string Name { get; set; }
public int? AdditionalFieldId { get; set; }
public int? FieldType { get; set; }
public int? CustomLookupId { get; set; }
public string Values { get; set; }
[ForeignKey("AdditionalFieldId")]
public virtual CampaignAdditionalField CampaignAdditionalField { get; set; }
[ForeignKey("CustomLookupId")]
public virtual CustomLookup CustomLookup { get; set; }
}
And I have a view model whcih is :
C#:
public class TreeviewItemViewModel
{
public TreeviewItemViewModel()
{
Children = new List<TreeviewItemViewModel>();
}
public string Text { get; set; }
public RuleSetupModel Values { get; set; }
// Children
public List<TreeviewItemViewModel> Children { get; set; }
}
public class RuleSetupModel
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Name { get; set; }
public int? AdditionalFieldId { get; set; }
public int? FieldType { get; set; }
public int? CustomLookupId { get; set; }
public string Values { get; set; }
public string LabelText { get; set; }
public int TreeLevel { get; set; }
public RuleSetupModel Parent { get; set; }
}
Now I need to save TreeviewItemViewModel to the nth Level. But my below method only goes to level 3. How can I go to nth Level to save child and parent objects
Repository method to save and update object:
C#:
public int SaveOrUpdateCampaignRuleSetup(CampaignRuleSetup model)
{
using (var context = new URNCustomizedFieldDataContext())
{
if (model.Id > 0) // update
{
var item = context.CampaignRuleSetups.FirstOrDefault(x => x.Id == model.Id);
if (item == null)
return 0;
item.Name = model.Name;
item.AdditionalFieldId = model.AdditionalFieldId;
item.FieldType = model.FieldType;
item.CustomLookupId = model.CustomLookupId;
item.Values = model.Values;
context.SaveChanges();
}
else // insert
{
context.CampaignRuleSetups.Add(model);
var save = context.SaveChanges();
}
return model.Id;
}
}
Save function to save objects
C#:
public bool SaveOrUpdateCampaignRuleSetup(TreeviewItemViewModel viewModel)
{
using (TransactionScope transactionScope = new TransactionScope())
{
try
{
// Level 1
var parentModel = new CampaignRuleSetup
{
Id = viewModel.Values.Id,
Name = viewModel.Values.Name,
AdditionalFieldId = viewModel.Values.AdditionalFieldId,
FieldType = viewModel.Values.FieldType,
CustomLookupId = viewModel.Values.CustomLookupId,
Values = viewModel.Values.Values
};
var parentId = _dataRepository.SaveOrUpdateCampaignRuleSetup(parentModel);
// Level 2
foreach (var child in viewModel.Children)
{
var childModel = new CampaignRuleSetup
{
Id = child.Values.Id,
ParentId = parentId,
Name = child.Values.Name,
AdditionalFieldId = child.Values.AdditionalFieldId,
FieldType = child.Values.FieldType,
CustomLookupId = child.Values.CustomLookupId,
Values = child.Values.Values
};
var childId = _dataRepository.SaveOrUpdateCampaignRuleSetup(childModel);
// Level 3
foreach (var grandChild in child.Children)
{
var grandChildModel = new CampaignRuleSetup
{
Id = grandChild.Values.Id,
ParentId = childId,
Name = grandChild.Values.Name,
AdditionalFieldId = grandChild.Values.AdditionalFieldId,
FieldType = grandChild.Values.FieldType,
CustomLookupId = grandChild.Values.CustomLookupId,
Values = grandChild.Values.Values
};
_dataRepository.SaveOrUpdateCampaignRuleSetup(grandChildModel);
}
}
transactionScope.Complete();
}
catch (Exception ex)
{
transactionScope.Dispose();
return false;
}
}
return true;
}
Last edited by a moderator: