2016-03-19 99 views
0

我正在使用ASP.NET Core和Entity Framework 7.我有一个套牌类和一个卡类。我正在尝试创建一个带有多对多关系的代码第一个DB,以及一个额外的字段 - 卡组中每张牌的数量。这是我的代码。实体框架7与其他字段的多对多关系

甲板类:

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

卡类:

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类:

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

套餐:

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" 

不幸的是,这将创建额外的ID的表: DeckId, CardId, DeckDeckId, CardCardId

我也想尽了办法建议here,但随后

DNX EF迁移添加

命令给我一个错误我应该使用流畅的api而不是属性,并且甚至不能创建数据库。 EF7中没有HasForeignKey()方法,所以我不能尝试。

我做错了什么,或者这在EF 7中还没有实现?

+0

HasOne也许。 ? – ErikEJ

+0

你是什么意思? HasOne在哪个属性上? –

+0

您的场景与您已配置的Deck <- Comment ->用户关系有些类似。所以你应该能够使用几乎相同的模式解决它(假设我没有错过任何东西): modelBuilder.Entity ().HasMany(d => d.DeckCard).WithOne(c => c。甲板); ()=(d = DeckCard).WithOne(c => c.Card); modelBuilder.Entity ().HasMany(d => d.DeckCard).WithOne(c => c.Card); –

回答

0

这很奇怪,但似乎代码没有问题。由于某些文件所有权问题,我必须重新安装Windows,尽管DNVM,Visual Studio和ASP .NET版本完全相同,但现在可以按预期工作,不需要更改代码或程序包。