| 

.NET C# Java Javascript Exception

2
Hallo,

ich versuche, mich gerade mit FluentNHibernate auseinander zu setzen. Mal angenommen, ich habe folgende Klassen:

public class Person : IEntity {
public virtual int Id { get; set; }
public virtual string LastName { get; set; }
public virtual string FirstName { get; set; }
public virtual IList<Movie> DirectedMovies { get; set; }
public virtual IList<Movie> ActorInMovies { get; set; }
}

public class Movie : IEntity {
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual IList<Person> Actors { get; set; }
public virtual Person Director { get; set; }
public virtual int ReleaseYear { get; set; }
}


Diese versuche ich jetzt mit folgenden MappingKlassen auf die DB zu mappen:

public class PersonMap : ClassMap<Person> {
public PersonMap() {
Id(x => x.Id);
Map(x => x.LastName);
Map(x => x.FirstName);
HasMany(x => x.DirectedMovies)
.Inverse()
.Cascade.All();
HasManyToMany(x => x.ActorInMovies)
.Inverse()
.Cascade.All()
.Table("MovieActors")
.Fetch.Select();
}
}
public class MovieMap : ClassMap<Movie> {
public MovieMap() {
Id(x => x.Id);
Map(x => x.ReleaseYear);
Map(x => x.Title);
References(x => x.Director)
.Cascade.All();
HasManyToMany(x => x.Actors)
.Cascade.All()
.Fetch.Select()
.Table("MovieActors");
}
}


Dann bekomme ich da einer (meiner Meinung nach) falsche Tabelle (Movie - die Person-Tabelle stimmt):

create table [Movie] (
Id INT IDENTITY NOT NULL,
ReleaseYear INT null,
Title NVARCHAR(255) null,
Director_id INT null,
Person_id INT null,
primary key (Id)
)


Wo kommt da jetzt das zusätzliche Feld "Person_id" her?

Wenn ich ein paar Daten erzeuge und speichere, funktioniert auch (fast) alles - das Feld Person_id wird auch nicht gefüllt.

Und da hab ich gleich noch einen ;)

Wenn ich die Daten jetzt abfrage:

var personList = from p in session.Query<Person> select p;


dann finde ich in personList[0].ActorInMovies die ganzen Filme, die eingetragen wurden, allerdings werden die DirectedMovies nicht geladen.

Sorry für die recht umfangreiche Frage ;)

Grüssli
24.03.2011
Mallen 53 5
2 Antworten
1
Versuch mal folgendens

public class PersonMap : ClassMap<Person> {
public PersonMap() {
...
HasMany(x => x.DirectedMovies)
.Inverse()
.KeyColumn("director_id")
.Cascade.All();
...
}
}

public class MovieMap : ClassMap<Movie> {
public MovieMap() {
...
References(x => x.Director)
.Column("director_id")
.Cascade.All();
...
}
}


So erstellt er bei mir alles richtig
31.03.2011
Freddyvdh 66 3
oh man, das löst beide Probleme... vielen Dank ;)
Mallen 31.03.2011
0
Kann das irgendwie damit zusammenhängen:

public class Movie : IEntity {
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual IList<Person> Actors { get; set; }
public virtual Person Director { get; set; }
public virtual int ReleaseYear { get; set; }
}
25.03.2011
nabuchodonossor 1,3k 5
ich hab das mal rausgenommen und das Feld war danach noch vorhanden. Nachdem ich allerdings das Feld Director entfernt hatte, waren die beiden Felder Person_id und Director_id weg?!
Mallen 25.03.2011
Tja, mehr ist mir nicht aufgefallen, ich kenne NHibernate aber nur mit per XML Files gemapt.
nabuchodonossor 25.03.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH