Am 09.02.2014 15:52, schrieb Jiri Cincura:
> Show us the code.
>

Ok:

  --- Model classes:

class CHILDDATA
{
        public int CHILDID { get; set; }
        public int MOTHERID { get; set; }
        public string CHILDNAME { get; set; }
        public virtual MOTHERDATA Mother { get; set; }
}

class MOTHERDATA
{
        public int MOTHERID { get; set; }
        public string MOTHERNAME { get; set; }
        public virtual ICollection<CHILDDATA> Children { get; set; }

        public MOTHERDATA()
        {
                Children = new List<CHILDDATA>();
        }
}

  --- Context class:

class SingleMothersDB : DbContext
{
     public DbSet<MOTHERDATA> MotherRecords { get; set; }
     public DbSet<CHILDDATA> ChildRecords { get; set; }

     public SingleMothersDB()
         : base(new FbConnection(@"database=localhost:singlemothers; 
user=sib; password=immergut"), true)
     { }

     protected override void OnModelCreating(DbModelBuilder modelBuilder)
     {
         modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
         modelBuilder.Entity<MOTHERDATA>().HasKey(m => m.MOTHERID);
         modelBuilder.Entity<MOTHERDATA>().Property(m => m.MOTHERNAME)
             .IsRequired().HasMaxLength(50);
         modelBuilder.Entity<CHILDDATA>().HasKey(c => c.CHILDID);
         modelBuilder.Entity<CHILDDATA>().Property(c => c.CHILDNAME)
             .IsRequired().HasMaxLength(50);
     }
}

  --- Application:

class Program
{
static void ShowMothersWithChildren(SingleMothersDB db)
{
     Console.WriteLine("Show mothers and their children");
     Console.WriteLine("Lazy loading enabled: {0}",
         db.Configuration.LazyLoadingEnabled);
     Console.WriteLine("Proxy creation enabled: {0}",
         db.Configuration.ProxyCreationEnabled);
     var motherquery = from m in db.MotherRecords
                       orderby m.MOTHERNAME
                       select m;
     foreach (var m in motherquery)
     {
         int childcount = m.Children.Count();
         Console.WriteLine("{0} (ID {1}) has {2} children:",
             m.MOTHERNAME, m.MOTHERID, childcount);
         foreach (var c in m.Children)
         {
             Console.WriteLine("{0} (ID {1})",
                 c.CHILDNAME, c.CHILDID);
         }
         Console.WriteLine();
     }
}

static void ShowChildrenWithMothers(SingleMothersDB db)
{
     Console.WriteLine("Show children and their mothers");
     Console.WriteLine("Lazy loading enabled: {0}",
         db.Configuration.LazyLoadingEnabled);
     Console.WriteLine("Proxy creation enabled: {0}",
         db.Configuration.ProxyCreationEnabled);
     var childquery = from c in db.ChildRecords
                      orderby c.CHILDNAME
                      select c;
     foreach (var c in childquery)
     {
         string mothername = (c.Mother == null ?
             "unknown" : c.Mother.MOTHERNAME);
         Console.WriteLine("{0} (Id {1}) is a child of {2}",
             c.CHILDNAME, c.CHILDID, mothername);
     }
     Console.WriteLine();
}

static void Main(string[] args)
{
     Database.SetInitializer<SingleMothersDB>(null);
     using (SingleMothersDB context =
         new SingleMothersDB())
     {
         ShowChildrenWithMothers(context);
         ShowMothersWithChildren(context);
     }
     Console.WriteLine("Press any key to continue ...");
     Console.ReadKey();
}
}

And the metadata for the database, if that's useful:

/********************* ROLES **********************/

CREATE ROLE RDB$ADMIN;
/********************* UDFS ***********************/

/****************** GENERATORS ********************/

CREATE GENERATOR S_CHILD;
CREATE GENERATOR S_MOTHER;
/******************** DOMAINS *********************/

/******************* PROCEDURES ******************/

/******************** TABLES **********************/

CREATE TABLE CHILDDATA
(
   CHILDID Integer NOT NULL,
   MOTHERID Integer NOT NULL,
   CHILDNAME Varchar(50) NOT NULL,
   PRIMARY KEY (CHILDID),
   UNIQUE (CHILDNAME)
);
CREATE TABLE MOTHERDATA
(
   MOTHERID Integer NOT NULL,
   MOTHERNAME Varchar(50) NOT NULL,
   PRIMARY KEY (MOTHERID),
   UNIQUE (MOTHERNAME)
);
/********************* VIEWS **********************/

/******************* EXCEPTIONS *******************/

/******************** TRIGGERS ********************/

SET TERM ^ ;
CREATE TRIGGER SET_CHILDID FOR CHILDDATA ACTIVE
BEFORE INSERT POSITION 0
AS BEGIN
        IF (NEW.childid IS NULL) THEN
                NEW.childid = NEXT VALUE FOR s_child;
END^
SET TERM ; ^
SET TERM ^ ;
CREATE TRIGGER SET_MOTHERID FOR MOTHERDATA ACTIVE
BEFORE INSERT POSITION 0
AS BEGIN
        IF (NEW.motherid IS NULL) THEN
                NEW.motherid = NEXT VALUE FOR s_mother;
END^
SET TERM ; ^

ALTER TABLE CHILDDATA ADD
   FOREIGN KEY (MOTHERID) REFERENCES MOTHERDATA (MOTHERID);


Thank you,
Sibylle


------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________
Firebird-net-provider mailing list
Firebird-net-provider@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/firebird-net-provider

Reply via email to