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
: Maalesefdependencies": { "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?
HasOne belki de olabilir. ? – ErikEJ
Ne demek istiyorsun? HasOne hangi mülkte? –
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); –