存储我无法在EF Core中更改的模型

时间:2018-03-16 13:48:14

标签: .net entity-framework ef-core-2.0

我正在使用一个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>

0 个答案:

没有答案