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中还没有实现?
HasOne也许。 ? – ErikEJ
你是什么意思? HasOne在哪个属性上? –
您的场景与您已配置的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); –