2016-03-19 19 views
0

ASP.NET Core ve Entity Framework 7 kullanıyorum. Bir deck sınıfım ve bir kart sınıfım var. Ben çok sayıda ilişki ve ek bir alan ile ilk DB bir kod yaratmaya çalışıyorum - destede her kartın sayısı. Bu benim kodum.Entity Framework 7 ek alanla birçok ilişkiye çok daha fazla

Güverte sınıfı:

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

Kart sınıfı:

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 sınıfı:

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

Paketler: Ben de yaklaşım here önerdi denedi DeckId, CardId, DeckDeckId, CardCardId

, ama sonra

dnx ef göçler eklemek

: Maalesef

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" 

, bu bir ek kimlikleri ile tablo oluşturur

komut bana bir hata veriyor öznitelikler yerine akıcı API kullanmalıyım ve DB bile oluşturulamıyor. EF7'de HasForeignKey() yöntemi yoktur, bu yüzden bunu deneyemem.

Yanlış bir şey mi yapıyorum yoksa bu henüz EF 7'de uygulanmıyor mu?

+0

HasOne belki de olabilir. ? – ErikEJ

+0

Ne demek istiyorsun? HasOne hangi mülkte? –

+0

Sizin senaryounuz, zaten yapılandırdığınız Güverte <- Comment -> Kullanıcı ilişkisine biraz benzer. Yani hemen hemen aynı desen kullanarak çözebilmelisiniz (bir şeyi kaçırmadığımı varsayarak): modelBuilder.Entity () .HasMany (d => d.DeckCard) .WithOne (c => c. Güverte); modelBuilder.Entity () .HasMany (d => d.DeckCard) .WithOne (c => c. Card); –

cevap

0

Bu çok garip, ancak kodla ilgili bir sorun yok gibi görünüyor. Bazı dosya sahiplik sorunları nedeniyle Windows'u yeniden yüklemek zorunda kaldım ve DNVM, Visual Studio ve ASP .NET sürümü tamamen aynı olsa da, bu artık hiçbir kod veya paket değişikliği olmadan tasarlandığı gibi çalışıyor.