Tutorial :Subsonic:SimpleRepository Parent Child relationship



Question:

I am trying to use the SimpleRepository feature in Subsonic3 - first of all, I must say a big thanks to RobC - Subsonic really rocks, and I can't wait to see additional updates to the SimpleRepository. I am a big fan of the migration approach (developer/class driven rather than starting with the DB).

I have had a look at the post here: Parent and Child object in SimpleRepository but I am still a bit confused.

If I have got these classes defined:

public class Permit {            public int PermitID {get; set;}          public string Number { get; set; }          public DateTime? DateIssued { get; set; }          public Product product { get; set; }      }        public class Product      {          public int ProductID { get; set; }          public string Value { get; set; }        }  

and then I want to save the data for a Permit, what should I be doing? Should I have defined a ProductID in the Permit class, and then programatically link them up? Or should the below code work?

 var repo = new SimpleRepository("ECPermit", SimpleRepositoryOptions.RunMigrations);              var permit = new Permit();              var product = new Product();                permit.Number = "apermit";              permit.DateAdded = DateTime.Now;                product.Value = "this is a product";              repo.Add(permit);              permit.product = product;              repo.Add(product);  

This is creating the Permit and Product table, but no links between them. What am I doing wrong? Thanks


Solution:1

What you need to be aware of here is that the relationships are created by populating foreign keyvalues. So what you're doing in your example is creating a permit and saving it then setting the ProductID of the permit (but not saving this information), then saving the product. If you reorder your code as follows the ProductID will be set correctly:

 var repo = new SimpleRepository("ECPermit", SimpleRepositoryOptions.RunMigrations);   var permit = new Permit();   var product = new Product();     product.Value = "this is a product";   repo.Add(product);     permit.Number = "apermit";   permit.DateAdded = DateTime.Now;       permit.ProductId = product.Id;   repo.Add(permit);  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »