From this post:
http://forums.lhotka.net/forums/thread/25658.aspx
Child pattern:
[Serializable]
public class Child : BusinessBase<Child>
{
internal static Child NewChild()
{
return DataPortal.CreateChild<Child>();
}
internal static Child GetChild()
{
return DataPortal.FetchChild<Child>();
}
private Child()
{
MarkAsChild();
}
private void Child_Create()
{
// initialize new child here
}
private void Child_Fetch()
{
// load child data here
}
private void Child_Insert()
{
// insert child data here
}
private void Child_Update()
{
// update child data here
}
private void Child_DeleteSelf()
{
// delete child data here
}
}
Editable root pattern:
[Serializable]
public class RootParent : BusinessBase<RootParent>
{
// other class code here ...
protected override void DataPortal_Insert()
{
using (SqlConnection cn = new SqlConnection(...))
{
// insert parent data here
FieldManager.UpdateChildren();
}
}
protected override void DataPortal_Update()
{
using (SqlConnection cn = new SqlConnection(...))
{
// update parent data here
FieldManager.UpdateChildren();
}
}
}
Editable Root List:
[Serializable]
public class ChildList : BusinessListBase<ChildList, Child>
{
// other class code here ...
protected override void DataPortal_Update()
{
using (SqlConnection cn = new SqlConnection(...))
{
Child_Update();
}
}
}
Editable Child List:
[Serializable]
public class ChildList : BusinessListBase<ChildList, Child>
{
internal ChildList()
{
MarkAsChild();
}
// other class code here ...
}
If you use the DataPortal methods for creating the child objects (i.e. FetchChild) then you don’t have to bother with the MarkAsChild() stuff.