.Override<Movie>(x => x.HasManyToMany(y => y.Genres).Table("MovieAssocGenre")
.ParentKeyColumn("z_MovieId").ChildKeyColumn("z_GenreId"))
.Override<Genre>(x => x.HasManyToMany(y => y.Movies).Table("MovieAssocGenre")
.ParentKeyColumn("z_GenreId").ChildKeyColumn("z_MovieId"))
And EntityFramework equivalent of NHibernate's ParentKeyColumn and ChildKeyColumn
// You can either do this:
modelBuilder.Entity<Movie>().HasMany(x => x.Genres).WithMany(x => x.Movies).Map(x =>
{
x.ToTable("MovieAssocGenre");
x.MapLeftKey("z_MovieId");
x.MapRightKey("z_GenreId");
});
// Or this:
modelBuilder.Entity<Genre>().HasMany(x => x.Movies).WithMany(x => x.Genres).Map(x =>
{
x.ToTable("MovieAssocGenre");
x.MapLeftKey("z_GenreId");
x.MapRightKey("z_MovieId");
});
// In Entity Framework, there's no need to do both statements, just choose one. Any of those statement fully describes the many-to-many on both ends
// Whereas in NHibernate, you need to do both
The DDL:
create table Movie ( MovieId int identity(1,1) not null primary key, MovieName varchar(100) not null unique, MovieDescription varchar(100) not null unique, YearReleased int not null, Version rowversion ); create table Genre ( GenreId int identity(1,1) not null primary key, GenreName varchar(100) not null unique ); create table MovieAssocGenre ( MovieAssocGenreId int identity(1,1) not null primary key, z_MovieId int not null references Movie(MovieId), z_GenreId int not null references Genre(GenreId), constraint uk_MovieAssocGenre unique(z_MovieId, z_GenreId) );
No comments:
Post a Comment