2016-11-11 2 views
0

私はEntity Frameworkコアで作業することを学んでいますが、以下のコードを実行することはできません。複数のカテゴリ(フィルタリング用)を持つImageを持つデータベースが必要です。イメージごとに複数のカテゴリ(最初のコード)

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; } 
} 

アドインの移行を次のテキストを生成します。ちょうどあなたの場合は

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

をあなたが主キーを必要としない2つのテーブルに参加したいですか?私は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

あなたはImageCategoryため複合 PK(主キー)を設定する必要があります。現在、Fluent API(参考:EF Core: Keys (primary))のみを使用できます。 (すでになかった場合)あなたのDbContext派生クラスで

OnModelCreatingをオーバーライドして、次の行を追加します。

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<ImageCategory>().HasKey(e => new { e.CategoryId, e.ImageId }); 
    // ... 
} 
関連する問題