verwendetes Datenbanksystem: <MySql>
Hallo zusammen,
ich habe ein zwei Mappings von 2 Klassen :
public RAETaskMapping()
{
Table("RAE_Task");
Id(p => p.ID,"Task_ID");
Map(p => p.Closed,"Closed");
References(p => p.ClosedBy,"FK_Employeeid_ClosedBy").Not.LazyLoad();
Map(p => p.ClosedDate);
Map(p => p.CreateDate);
Map(p => p.ExtendedInfo);
References(p => p.CreatedFrom, "FK_Employeeid_CreatedFrom").Not.LazyLoad();
References(p => p.Employee, "FK_Employeeid_Employee").Cascade.All().Not.LazyLoad();
HasManyToMany(p => p.NextRevisor).Cascade.All().ChildKeyColumn("Employee_ID").ParentKeyColumn("Task_ID").Not.LazyLoad();
Map(p => p.Name).Not.Nullable();
Map(p => p.Comment);
}
public EmployeeMapping()
{
Table("Employee");
Id(p => p.ID, "Employee_ID");
Map(p => p.Forename);
Map(p => p.Surname);
Map(p => p.Username);
Map(p => p.PersonalNummer);
Map(p => p.PasswordHash);
Map(p => p.PasswordSalt);
References(p => p.Group,"FK_GroupId");
HasMany(p => p.Tasks).KeyColumn("FK_Employeeid_Employee").Cascade.SaveUpdate().Not.LazyLoad();
HasManyToMany(p => p.AssignedTo).ChildKeyColumn("Task_ID").ParentKeyColumn("Employee_ID").Not.LazyLoad();
Map(p => p.Email);
}
Und die beiden Klassen dazu :
[Serializable]
public class RAETask
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
public virtual bool Closed { get; set; }
public virtual DateTime CreateDate { get; set; }
public virtual Employee CreatedFrom { get; set; }
public virtual DateTime? ClosedDate { get; set; }
public virtual Employee ClosedBy { get; set; }
public virtual Employee Employee { get; set; }
public virtual IList<Employee> NextRevisor { get; set; }
public virtual string ExtendedInfo { get; set; }
public virtual string Comment { get; set; }
public virtual bool Equals(object obj)
{
return Equals(this, (RAETask) obj);
}
protected virtual bool Equals(RAETask x ,RAETask y)
{
return x.ID == y.ID && y.Name == x.Name;
}
}
[Serializable]
public class Employee
{
public virtual int ID { get; set; }
public virtual string Forename { get; set; }
public virtual string Surname { get; set; }
public virtual EmployeeGroup Group { get; set; }
public virtual string Username { get; set; }
public virtual string Email { get; set; }
public virtual string PersonalNummer { get; set; }
public virtual IList<RAETask> Tasks { get; set; }
public virtual IList<RAETask> AssignedTo { get; set; }
public virtual string PasswordHash { get; set; }
public virtual string PasswordSalt { get; set; }
}
Im Speziellem gehts mir ind er Klasse RAETask um die Property NextRevisor.
Egal wie ich mich anstelle : In der ForeignKeyTabelle landet kein Datensatz. Beim Debuggen sind in der Collection Werte enthalten, sobald ich aber speichere kommt nix bei der Datenbank an.
Jmd ne Idee ?
Bei bidirektionalem Many-To-Many Mapping braucht NHibernate, von beiden Seiten, den Namen der Indextabelle.
The Table call is currently only required if you're doing a bidirectional many-to-many, because Fluent NHibernate currently can't guess what the name should be; for all other associations it isn't required. https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started Chapter: Mappings
In deinem Fall in etwa so:
public RAETaskMapping()
{
...
HasManyToMany(p => p.NextRevisor).Cascade.All().ChildKeyColumn("Employee_ID").ParentKeyColumn("Task_ID").Table("RAETaskEmployee").Not.LazyLoad();
...
}
public EmployeeMapping()
{
...
HasManyToMany(p => p.AssignedTo).ChildKeyColumn("Task_ID").ParentKeyColumn("Employee_ID").Table("RAETaskEmployee").Not.LazyLoad();
...
}