3
\$\begingroup\$

We have a table with periods, and other child tables with these periods and values for combinations of product + location.

Based on selected periods, I would like to add any missing rows in the child tables. I have come up with the following code, which seems to work just fine. But I would like to know if there is a simpler or more efficient way of doing this, since I have to repeat this for a number of tables.

public static void SeedActivityData(int startPeriod, double endPeriod, IList<DAL.OMS_StockStatus> stockStatus)
{
 DAL.EFDbContext dbFilter = new DAL.EFDbContext(0, stockStatus.FirstOrDefault().Product, startPeriod, endPeriod);
 var period = dbFilter.Periods.Select(b => b.PeriodID);
 foreach (var item in stockStatus)
 {
 IEnumerable<int> missingFAF = period.Except(dbFilter.OMS_Forecast_Adjustment.Where(a => a.SiteID == item.SiteID).Select(b => b.PeriodID));
 var modelFAF = db.OMS_Forecast_Adjustment;
 foreach (int periodID in missingFAF)
 {
 var modelItem = new OMS_Forecast_Adjustment { PeriodID = periodID, Product = item.Product, SiteID = item.SiteID, Value = 0 };
 modelFAF.Add(modelItem);
 }
 IEnumerable<int> missingRAF = period.Except(dbFilter.OMS_Receipts_Adjustment.Where(a => a.SiteID == item.SiteID).Select(b => b.PeriodID));
 var modelRAF = db.OMS_Receipts_Adjustment;
 foreach (int periodID in missingRAF)
 {
 var modelItem = new OMS_Receipts_Adjustment { PeriodID = periodID, Product = item.Product, SiteID = item.SiteID, Value = 0 };
 modelRAF.Add(modelItem);
 }
 db.SaveChanges();
 }
}
Phrancis
20.5k6 gold badges69 silver badges155 bronze badges
asked Oct 3, 2014 at 5:45
\$\endgroup\$
1
  • 1
    \$\begingroup\$ Could you add some more detailed information? It would be helpful to see some examples of the situations you are trying to address. For instance showing the data/collection before, then after. Thanks! My first thought though is that it looks like you repeat the same iteration and adding twice. You can probably pull that out into a separate method. \$\endgroup\$ Commented Oct 3, 2014 at 9:58

1 Answer 1

2
\$\begingroup\$

Looks to me like you should create an Add method to both the OMS_Forecast_Adjustment and OMS_Receipts_Adjustment classes.

you are really adding things to the db all wrong, you are creating new objects in your code when you don't have to, I think that you really want to add items to a collection variable inside your db object.

it should be an InsertRecord method

this:

 var modelFAF = db.OMS_Forecast_Adjustment;
 foreach (int periodID in missingFAF)
 {
 var modelItem = new OMS_Forecast_Adjustment { PeriodID = periodID, Product = item.Product, SiteID = item.SiteID, Value = 0 };
 modelFAF.Add(modelItem);
 }

Would turn into this

foreach (int periodID in missingFAF)
{
 db.Insert_OMS_Forcase_Adjustment(periodID, item.prodeuct, item.SiteID, 0);
}

so you actually do your insertion inside of a method in the class that you already have.

This removes the creation of 2 extraneous local variables and puts responsibility where it belongs inside of a method in the object that needs to perform the action.

This can be done on both Foreach Loops

answered Oct 3, 2014 at 19:46
\$\endgroup\$
2
  • \$\begingroup\$ Thanks Malachi. But how can I implement the InsertRecord method? Or should I now ask this in StackOverflow forum? \$\endgroup\$ Commented Oct 4, 2014 at 18:03
  • \$\begingroup\$ it's a different structure than what you have here, but it is doing pretty much the same thing. I don't know how they would react to that question on StackOverflow. and as far as a StackOverflow forum, I didn't know there was one.... \$\endgroup\$ Commented Oct 4, 2014 at 20:30

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.