Использование кода Entity Framework. Первая парадигма. Я определил следующие объекты и отношения как часть приложения ASP.Net MVC3.Проблема в том, что отношения «многие ко многим» между объектами «Фото» и «Галерея» не работают должным образом.
В настоящее время галерея может содержать много фотографий - это правильно.Но фотография может быть связана только с одной галереей - это неверно.Я хочу, чтобы фотография была во многих галереях.Если я добавлю фотографию в галерею, когда она уже связана с другой галереей, она будет удалена из другой галереи.
Я был бы очень признателен за ваши решения о том, как заставить эти отношения «многие ко многим» работать.
Вот мой код:
public class Photo
{
public int ID { get; set; }
public string Title { get; set; }
public virtual ICollection<Gallery> Galleries { get; set; }
}
public class Gallery
{
public int ID { get; set; }
public string Title { get; set; }
public virtual ICollection<Photo> Photos { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
/* I would expect the following to cause a lookup table to
* be created but it isnt */
modelBuilder.Entity<Photo>().HasMany<Gallery>(p => p.Galleries);
modelBuilder.Entity<Gallery>().HasMany<Photo>(g => g.Photos);
}
Я использую следующий код в своем собственном пользовательском инициализаторе базы данных.
public void InitializeDatabase(PhotoDBContext context)
{
var dbCreationScript = ((IObjectContextAdapter)context).ObjectContext.CreateDatabaseScript();
Log(dbCreationScript);
context.Database.ExecuteSqlCommand(dbCreationScript);
}
Записав в журнал переменную dbCreationScript, которую я вижучто соответствующий sql, сгенерированный для этих таблиц, выглядит следующим образом.
create table [dbo].[Galleries] (
[ID] [int] not null identity,
[Title] [nvarchar](max) null,
[Photo_ID] [int] null,
primary key ([ID])
);
create table [dbo].[Photos] (
[ID] [int] not null identity,
[Title] [nvarchar](max) null,
[Gallery_ID] [int] null,
primary key ([ID])
);
alter table [dbo].[Photos] add constraint [Gallery_Photos] foreign key ([Gallery_ID]) references [dbo].[Galleries]([ID]);
alter table [dbo].[Galleries] add constraint [Photo_Galleries] foreign key ([Photo_ID]) references [dbo].[Photos]([ID]);
Как вы можете видеть, не существует SQL, сгенерированного для создания таблицы поиска, что, вероятно, объясняет, почему связь не работает - почему это не так?таблица поиска создается?