I'm experiencing issues with Fluent Nhibernate in mapping these relations:
Request entity:
- id
- date
School entity:
- Composite id made of
- name
- request
- property
Location entity:
- Composite id made of
- exists (boolean)
- school (-> foreign key on school_name and request_id)
- province
Basically, these relations represent a situation where I ask about a school to some web api service. I want to save the request (I put here only the date, but I have a LOT more fields) AND the information retrieved for the school. I also want to bind this information with the request which generated the information. I also want to save the school location and bind this information as before.
What I've done so far:
School.cs:
public class School
{
public virtual string name {get; set;}
public virtual Request request {get; set;}
public virtual string property;
}
Request.cs:
public class Request
{
public virtual int id {get; set;}
public virtual DateTime date {get; set;}
}
Location.cs:
public class Location
{
public virtual bool exist {get; set;}
public virtual School school {get; set;}
public virtual string province {get; set;}
}
SchoolMap.cs
public class SchoolMap : ClassMap<School>
{
public SchoolMap() {
CompositeId().KeyProperty(x => x.name, "name")
.KeyProperty(x => x.request, "request_id");
Map(x => x.property);
}
}
RequestMap.cs
public class Request : ClassMap<Request>
{
public SchoolMap() {
Id(x => x.id).GeneratedBy.Identity();
Map(x => x.date);
}
}
LocationMap.cs
public class LocationMap : ClassMap<Location>
{
public LocationMap() {
CompositeId().KeyProperty(x => x.exist)
.KeyReference(x => x.school, new string[] {"name", "request_id"});
References<School>(x => x.school).Columns(new string [] {"name", "request_id"}).Cascade.All();
Map(x => x.province);
}
}
I also have implemented each repository inheriting from AbstractRepository. The "save" method is (example for SchoolRepository)
public School saveSchool(School school)
{
var transaction = openTransaction();
session.saveOrUpdate(school);
transaction.commit();
return school;
}
This scheme doesn't work. If I create and save (in this order) one request, then one school referencing that request, then one location referencing the school, I receive an "SqlParameter OutOfBound" exception.
I can't figure out how to map this relation.
Thanks in advance to all.