gpt4 book ai didi

C# Entity Framework Core - 对象名称无效,无法更新数据库

转载 作者:行者123 更新时间:2023-11-30 23:52:41 25 4
gpt4 key购买 nike

  1. 将 MDF 数据库添加到名为 FxTrader.mdf 的项目
  2. 创建简单模型:

    public class MarketTickContext : DbContext

    {


    public DbSet<MarketTickRecord> Records { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
    string connectionString = @"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename = ""C:\Users\asmodat\Documents\Visual Studio 2015\Projects\Asmodat FxTrader\Asmodat FxTrader Data\FxTrader.mdf""; Integrated Security = True";
    optionsBuilder.UseSqlServer(connectionString);

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
    modelBuilder.Entity<MarketTickRecord>()
    .HasKey(mtr => new { mtr.Company, mtr.Symbol });

    modelBuilder.Entity<MarketTickRecord>()
    .HasMany(mtr => mtr.Ticks);

    modelBuilder.Entity<MarketTick>()
    .HasKey(mt => mt.Time);
    }
    }
  3. 在控制台中运行:Add-Migration MarketTickMigration.v3 -> 成功

  4. 然后更新数据库->成功

但首先。此操作后的数据库看起来不像我预期的那样。我认为应该有2个表:MarketTickRecord和MarketTick表

But only some wierd table appears, that looks like this.

所以当我运行这段代码时:

_context = new MarketTickContext();
_context.Records.Add(new MarketTickRecord());
_context.SaveChanges();

最后一行产生异常:

An unhandled exception of type 'Microsoft.EntityFrameworkCore.DbUpdateException' occurred in Microsoft.EntityFrameworkCore.dll

Additional information: An error occurred while updating the entries. See the inner exception for details.

{"Invalid object name 'Records'."}

如果我尝试也一样:

_context.Records.Count()

任何人都可以指出我做错了什么吗?如何更新我的数据库以使其正常工作?

编辑###############################-> 进度

我正在慢慢弄清楚发生了什么,所以我创建了尽可能简单的模型来逐步检查问题所在。

public class TestContext : DbContext
{
public DbSet<TestRecord> Tests { get; set; }

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Asmodat_FxTrader_Data.MarketTicksDb.v14;Trusted_Connection=True;");
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<TestRecord>()
.HasKey(c => new { c.SomeK1, c.SomeK2 });
}
}

以上模型运行良好。因此,在创建将放置在 TestRecord 类列表中的新“测试”类后出现问题,例如:

 public class TestRecord
{

public string SomeK1 { get; set; }

public string SomeK2 { get; set; }

public List<Test> Tests { get; set; }
}

public class Test
{

public long SomeK1 { get; set; }

public int V1 { get; set; }

public int V2 { get; set; }
}

如果我现在将 OnModelCreating 更新为:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<TestRecord>()
.HasKey(c => new { c.SomeK1, c.SomeK2 });

modelBuilder.Entity<Test>()
.HasKey(c => c.SomeK1);
}

出现与原始问题中相同的异常....

问题就在这里,与这个 List 对象或 OnModelCreating 中缺少的东西有关。有什么想法吗?

编辑##########################################

我也按照评论中的建议尝试了这个:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var tr = modelBuilder.Entity<TestRecord>();
tr.HasKey(c => new { c.SomeK1, c.SomeK2 });
tr.HasMany(c => c.Tests);
tr.ToTable("Records");

var t = modelBuilder.Entity<Test>();
t.HasKey(c => c.SomeK1);
t.ToTable("Tests");
}

仍然是同样的问题,只有名称在执行时发生错误更改

TestContext con = new TestContext();
con.Tests.Add(new TestRecord() { SomeK1 = "a1", SomeK2 = "a2", Tests = new List<Test>() });
con.SaveChanges();

编辑##########################################

我需要的是拥有许多 TestRecord,其中可以将许多测试存储在列表中(一对多)。

但还需要的是,假设 TestRecord with SomeK = {'a','b'},TestRecord with SomeK = {'c', 'd'},可能有具有相同 id 的测试, 但它们是不同的对象(例如不同的 V1 和 V2)。

例如(伪代码):

TestRecord['a','b'].Tests[1].v1 == 1
TestRecord['c','d'].Tests[1].v1 == 2

这可能吗?有谁知道如何使用 ef core flex API 实现这一目标?因为我所有的尝试都失败了。

最佳答案

我目前在一个学校项目中使用 Entity Framework ,我遇到过很多奇怪的事情,所以我能感受到你的痛苦。我不确定您的类(class)对于 MarketTickRecord 或 MarketTick 到底是什么样子,但是我的教授让我们添加到数据库对象中的一件事是数据注释 [Table("YOUR_TABLE_NAME)"] 在 ' public class ...' 行和 [Key] 在类中用作主键的属性之上。此外,我们使用 visual studio 中的数据库设计器手动创建了我们的表。不确定这是否对您有帮助,但值得一试!

关于C# Entity Framework Core - 对象名称无效,无法更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42351478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com