Hi i'm having a problem mapping entities that references other
entities that have a ID of type string.

The schemas for 3 tables, school references school system and that
references county:

School (
   School_Id INTEGER primary key,
   Name TEXT,
   SchoolSystem_id INTEGER not null foreign key
)

SchoolSystem(
  SchoolSystem_Id INTEGER primary key,
  County_Name TEXT not null foreign key,
)

County (
   County_Name TEXT not null primary key,
   County_Number INTEGER not null,
)

-------------------------------------------------------------

Mapping classes:

  public class CountyMap : ClassMap<County>
  {
    public CountyMap()
    {
      WithTable("County");
      Id(x => x.Name, "County_Name");
      Map(x => x.Number, "County_Number").Not.Nullable();
    }
  }

  public class SchoolSystemMap : ClassMap<SchoolSystem>
  {
    public SchoolSystemMap()
    {
      WithTable("SchoolSystem");
      Id(x => x.Id, "School_System_ID");
      References(x => x.County, "County_Name").Not.Nullable()
              .WithForeignKey("County_Name").FetchType.Join
().Cascade.All();
    }
  }

  public class SchoolMap : ClassMap<School>
  {
    public SchoolMap()
    {
      WithTable("School");
      Id(x => x.Id, "School_ID");
      Map(x => x.Name, "School_Name");
      References(x => x.SchoolSystem, "School_System_ID").Not.Nullable
()
                 .WithForeignKey("School_System_ID").FetchType.Join
().Cascade.All();
    }
  }

-----------------------------------------------------------------------------

And the entities:

  public class County
  {
    public virtual string Name { get; set; }
    public virtual int Number { get; set; }
  }
  public class SchoolSystem
  {
    public virtual int Id { get; set; }
    public virtual County County { get; set; }
  }
  public class School
  {
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual SchoolSystem SchoolSystem { get; set; }
  }

---------------------------------------------------------------

Testing the mappings for County works:

      new PersistenceSpecification<County>(session)
        .CheckProperty(s => s.Name, "Thurston")
        .CheckProperty(s => s.Number, 10)
        .VerifyTheMappings();

Testing mapping for SchoolSystem fails:

      new PersistenceSpecification<SchoolSystem>(session)
        .CheckProperty(p => p.County, new County {Name = "SomeCounty",
Number = 10})
        .VerifyTheMappings();

It throws an error.  And it looks like it is because it is expecting
an insert instead of an update on County so it throws an exception:

INSERT INTO SchoolSystem (County_Name) VALUES (@p0); select
last_insert_rowid();
UPDATE luCounty SET County_Number = @p0 WHERE County_Name = @p1;

NHibernate.StaleStateException: Unexpected row count: 0; expected: 1.

---------------------------------------------------------------
Here are a few things i've tried.

I removed the county name from the test to try to get an insert.

      new PersistenceSpecification<SchoolSystem>(session)
        .CheckProperty(p => p.County, new County { Number = 10})
        .VerifyTheMappings();

and get the exception:

     NHibernate.Id.IdentifierGenerationException: ids for this class
must be manually assigned before calling save

So I tried to change the mapping of the CountyMap Id to be
GeneratedBy.Assigned and GeneratedBy.Identity but couldn't get my
mapping test to pass either.  It works ok if i do not have the id as
type string but it is a string in the database so i dont think that
helps me any.

I'm out of ideas, am i doing something wrong.  Any help would be
great.  Thanks.

I also had a side question.  I played around in making my domain
objects inherit from the fluent nhibernate Entity but that adds an
extra id to my db table schema, i don't quite understand how that
works.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" group.
To post to this group, send email to fluent-nhibernate@googlegroups.com
To unsubscribe from this group, send email to 
fluent-nhibernate+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to