我正在使用一个API,它有一堆我正在使用的模型。有些模型非常庞大,我在迁移数据库方面遇到了麻烦。我想要存储的实体在这里显示; https://www.lucidchart.com/documents/view/04c6d73b-961d-4d9f-b8dd-104dd9db8c94/0
每个顶级对象都是我控制的对象,我将主键存储在其中,并且在编辑实际文件本身方面,包含的对象不受我的控制,我已设法获得第一个表工作(SummonerTable),但我正在努力让MatchReferenceTable正确迁移。我收到了错误
The entity type 'MatchReference' requires a primary key to be defined.
尝试添加迁移时。
我在MatchReferenceTable周围完成的所有代码如下:
按实体图存储的数据对象;
public class MatchReferenceDto
{
public MatchReferenceDto() { }
public MatchReferenceDto(MatchReference matchReference)
{
MatchReference = matchReference;
}
[Key]
public int Id { get; set; }
public MatchReference MatchReference { get; set; }
}
我的DbContext类;
public class MatchReferenceDtoContext : DbContext
{
public MatchReferenceDtoContext(DbContextOptions<MatchReferenceDtoContext> options)
: base(options)
{ }
public DbSet<MatchReferenceDto> MatchReferences { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MatchReferenceDto>().HasKey(c => c.Id);
base.OnModelCreating(modelBuilder);
}
}
我在startup.cs中的服务
这个数据库有效并且处于活动状态,我将在此处包含与上述类似的配置,以防我在这里做错了并让它偶然发挥作用。
var summonerConnection = @"Server=(localdb)\mssqllocaldb;Database=SummonerDb;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<SummonerDtoContext>(options => options.UseSqlServer(summonerConnection));
我的MatchReference服务连接
var matchReferenceConnection = @"Server=(localdb)\mssqllocaldb;Database=MatchReferenceDb;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<MatchReferenceDtoContext>(options => options.UseSqlServer(matchReferenceConnection));
这些是我放入的所有配置,当我尝试添加迁移时,我收到上面提到的错误。
如上所述,这里是我对SummonerDtoConext的配置;
数据对象;
public class SummonerDto
{
public SummonerDto() {}
public SummonerDto(Summoner summoner)
{
Summoner = summoner;
}
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public DateTime DateLastUpdated { get; set; }
public Summoner Summoner { get; set; }
}
在这里注意,我还尝试了我的MatchReference数据对象中的DatabaseGeneratedAttribute。
的DbContext;
public class SummonerDtoContext : DbContext
{
public SummonerDtoContext(DbContextOptions<SummonerDtoContext> options)
: base(options)
{ }
public DbSet<SummonerDto> Summoners { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SummonerDto>().HasKey(c => c.Id);
//Stop keys being generated automatically
modelBuilder.Entity<Summoner>().Property(x => x.Id).ValueGeneratedNever();
modelBuilder.Entity<Summoner>().Property(x => x.ProfileIconId).ValueGeneratedNever();
modelBuilder.Entity<SummonerBase>().Property(x => x.Id).ValueGeneratedNever();
modelBuilder.Entity<SummonerBase>().Property(x => x.AccountId).ValueGeneratedNever();
base.OnModelCreating(modelBuilder);
}
}
和服务器连接;
var summonerConnection = @"Server=(localdb)\mssqllocaldb;Database=SummonerDb;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<SummonerDtoContext>(options => options.UseSqlServer(summonerConnection));
我正在尽我所能避免重复我正在使用的API提供的模型,但我现在不知道如何做我正在看的事情/如果可能的话。 / p>