2016-11-11 3 views
0

Я пытаюсь научиться работать с ядром Entity Framework, но не могу получить следующий код для работы. Мне нужна база данных с изображением, которое имеет несколько категорий (для фильтрации).Несколько категорий на изображение (сначала код)

public class ImageCategory 
{ 
    public string CategoryId { get; set; } 
    public int ImageId { get; set; } 

    //************* 
    [ForeignKey("CategoryId")] 
    public virtual Category Category { get; set; } 
    //************* 
    [ForeignKey("ImageId")] 
    public virtual Image Image { get; set; } 
} 

......

public class Category 
{ 
    [Key] 
    [Display(Name="Category name")] 
    public string Id { get; set; } 
} 

.....

public class Image 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 

    [FileExtensions(Extensions = "jpg,png,gif,jpeg,bmp,svg")] 
    [DataType(DataType.ImageUrl)] 
    public string ThumbnailUrl { get; set; } 

    [Required] 
    [FileExtensions(Extensions = "jpg,png,gif,jpeg,bmp,svg")] 
    [DataType(DataType.ImageUrl)] 
    public string ImageUrl { get; set; } 

    [FileExtensions(Extensions = "jpg,png,gif,jpeg,bmp,svg")] 
    [DataType(DataType.ImageUrl)] 
    public string ImageUrlFullRes { get; set; } 

    [Required] 
    public string AltText { get; set; } 

    public int NumberOfViews { get; set; } 

    [Required] 
    [DataType(DataType.Date)] 
    public DateTime UploadDate { get; set; } 

    //************* 
    [Required] 
    public virtual ICollection<ImageCategory> Categories { get; set; } 
} 

Add-Миграции генерировать следующий текст:

PM> Add-Migration InitialMigration -context ImageContext 
System.InvalidOperationException: The entity type 
'quandar_eu.Models.Images.ImageCategory' requires a primary key to be defined. 

Если вы только хотите присоединиться к двум таблицам, вам не нужен правильный ключ? Я попытался найти решение Google, но не смог найти его.

Ссылки на хорошие учебники/электронную книгу помогают многое, так как я хочу узнать гораздо больше.

Редактировать Спасибо Ivan Stoev. Это заключительная часть кода, чтобы все это работало.

public class ImageContext : DbContext 
{ 
    public ImageContext(DbContextOptions<ImageContext> options) : base(options) 
    { 

    } 

    public DbSet<Image> Image { get; set; } 

    public DbSet<Category> Category { get; set; } 

    public DbSet<ImageCategory> ImageCategory { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<ImageCategory>().HasKey(e => new { e.CategoryId, e.ImageId }); 
    } 
} 
+1

ядра EntityFramework или EntityFramework 6? Если ядро, пожалуйста, отрегулируйте теги, тэг-объект-фрейм для старой структуры EF + – Tseng

ответ

0

Вам нужно настроить композитный PK (первичный ключ) для ImageCategory. В настоящее время это возможно только с использованием Fluent API (ссылка: EF Core: Keys (primary)).

В вашем DbContext производном классе переопределить OnModelCreating (если вы не сделали) и добавить следующее:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<ImageCategory>().HasKey(e => new { e.CategoryId, e.ImageId }); 
    // ... 
} 
Смежные вопросы