Entity Framework 7 many to many relationship with additional field

asp.net-core entity-framework entity-framework-core

Question

I am using ASP.NET Core and Entity Framework 7. I have a deck class and a card class. I am trying to create a code first DB with a many to many relationship and an additional field - count of each card in the deck. This is my code.

Deck class:

public class Deck
{
    public int DeckId { get; set; }
    [Required]
    [MinLength(8)]
    public string Name { get; set; }
    public string Description { get; set; }
    public short Score { get; set; }
    [HasHeroValidate]
    public Hero Hero { get; set; }

    public short AspectOrder { get; set; }
    public short AspectWisdom { get; set; }
    public short AspectNature { get; set; }
    public short AspectRage { get; set; }
    public short AspectDominion { get; set; }
    public short AspectCorruption { get; set; }

    [CardCountValidate]
    public ICollection<DeckCard> DecksCards { get; set; }
    public ICollection<Comment> Comments { get; set; }
}

Card class:

public class Card
{
    public int CardId { get; set; }
    public String Name { get; set; }
    public String ImgUri { get; set; }
    public short ManaCost { get; set; }
    public CardType CardType { get; set; }

    public short AspectOrder { get; set; }
    public short AspectWisdom { get; set; }
    public short AspectNature { get; set; }
    public short AspectRage { get; set; }
    public short AspectDominion { get; set; }
    public short AspectCorruption { get; set; }

    public ICollection<DeckCard> DecksCards { get; set; }
}

DeckCard class:

public class DeckCard
{
    public int DeckId { get; set; }
    public int CardId { get; set; }

    public Deck Deck { get; set; }
    public Card Card { get; set; }

    public short Count { get; set; }
}

DBcontext :

public sealed class SwDbContext :IdentityDbContext<SwdUser>
{
    private static bool _created = false;
    public SwDbContext()
    {
        if (!_created)
        {
            _created = true;
            Database.EnsureCreated();
        }
    }

    public DbSet<Deck> Decks { get; set; }
    public DbSet<Card> Cards { get; set; }
    public DbSet<Hero> Heroes { get; set; }
    public DbSet<Comment> Comments { get; set; }
    public DbSet<DeckCard> DeckCards { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<SwdUser>().HasMany(u => u.Comments).WithOne(c => c.User);
        modelBuilder.Entity<Deck>().HasMany(d => d.Comments).WithOne(c => c.Deck);
        modelBuilder.Entity<DeckCard>().HasKey(x => new {x.DeckId, x.CardId});
        base.OnModelCreating(modelBuilder);
    }
}

Packages :

dependencies": {
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.Framework.DependencyInjection": "1.0.0-beta8",
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
    "Microsoft.AspNet.Authorization": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
    "Serilog.Framework.Logging": "1.0.0-rc1-final-10078",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
    "Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",
    "EntityFramework.Core": "7.0.0-rc1-final",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final"

Unfortunately, this creates a table with additional IDs : DeckId, CardId, DeckDeckId, CardCardId

I have also tried the approach suggested here, but then the

dnx ef migrations add

command gives me an error that I should use fluent api instead of attributes and the DB can't even be created. There is no HasForeignKey() method in EF7, so I can't try that.

Am I doing something wrong or is this not yet implemented in EF 7?

1
0
5/23/2017 11:50:29 AM

Popular Answer

This is very weird, but it seems there was no problem with the code. I had to reinstall Windows due to some file ownership problems and although the DNVM, Visual Studio and ASP .NET version are exactly the same, this now works as intended with no code or package changes.

0
3/23/2016 3:44:21 PM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow