Entity Framework 4.1 Code First - определите «многие ко многим», используя только аннотации данных - PullRequest
8 голосов
/ 08 июня 2011

Можно ли определить отношение "многие ко многим" в Entity Framework 4.1 (подход Code First), используя только аннотации данных, без компоновщика моделей?

Например, что-то вроде:

Product = { Id, Name, ... }
Category = { Id, Name, ... }
ProductCategory = { ProductId, CategoryId }

Вы получите изображение.

Я не хочу иметь промежуточную сущность ProductCategory в контексте с двумя множественными единицами, поскольку у меня нет никаких дополнительных данных, только два FK. Кроме того, я должен иметь возможность определить имя таблицы для промежуточной таблицы для использования с существующей базой данных.

1 Ответ

11 голосов
/ 08 июня 2011

Можно определить «многие ко многим» с соглашениями по умолчанию или с аннотациями данных, но невозможно изменить отображение на таблицу соединений (имя таблицы и столбцы) без построителя модели.Простые многие-ко-многим:

public class Product
{
    public int Id { get; set; }
    public virtual ICollection<Category> Categories { get; set; }
}

public class Category
{
    public int Id { get; set; }
    public virtual ICollection<Product> Products { get; set; }
}

Для использования аннотаций вы можете использовать:

public class Product
{
    [Key]
    public int Id { get; set; }
    [InverseProperty("Products")]
    public virtual ICollection<Category> Categories { get; set; }
}

public class Category
{
    [Key] 
    public int Id { get; set; }
    [InverseProperty("Categories")]
    public virtual ICollection<Product> Products { get; set; }
}

Если вам нужно управлять отображением соединительной таблицы в существующей базе данных, вам нужно modelBuilder.Аннотации данных не так мощны, как свободный API.

...