【问题标题】:Entity Framework Core, unable to set HasName on PrimaryKey实体框架核心,无法在 PrimaryKey 上设置 HasName
【发布时间】:2020-06-08 07:21:37
【问题描述】:

我正在尝试使用 Entity Framework Core 访问 CosmosDB 集合。

我的数据库有各种数据,但主键是 'id' 我的模型有一个子集,但使用 'Id' 而不是 'id'。

我已检查我是否能够读取/写入测试数据库,其中包含“id”的副本作为“Id”。这不会导致任何问题。

据我所知,https://docs.microsoft.com/en-us/ef/core/modeling/indexes 应该可以设置“HasName”属性。

[DataContract]
[Serializable]
public class TestModel
{
    [DataMember] 
    [JsonProperty("id")] 
    public string Id { get; set; }

    [DataMember] 
    public string Pid { get; set; }
}


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<TestModel>().ToContainer("TestModel");
    modelBuilder.Entity<TestModel>().HasPartitionKey(x => x.Pid);
    modelBuilder.Entity<TestModel>().HasNoDiscriminator();

    modelBuilder.Entity<TestModel>().HasKey(b => b.Id).HasName("id");
}

使用这个,我仍然得到一个错误。

InvalidOperationException:无法跟踪“TestModel”类型的实体,因为主键属性“Id”为空。

我也曾在试错中,尝试过使用。 - HasName + HasKey / HasIndex - HasColumnName + 属性

【问题讨论】:

  • 您解决了这个问题还是还在寻找解决方案? docs.microsoft.com/en-us/ef/core/providers/cosmos/…
  • 我无法解决这个@MikeUbezziMSFT 任何赞赏的指针。
  • 我不再在微软工作。我希望您能够或已经找到解决方案。再次对延迟回复更新表示歉意。

标签: entity-framework .net-core entity-framework-core azure-cosmosdb


【解决方案1】:

这似乎是由 EF Core 3.0 中的重大更改引起的,这些可以在 here 找到。

你大概可以用数据注解[DatabaseGenerated(DatabaseGeneratedOption.Identity)]来解决

public class TestModel
{
    [DataMember] 
    [JsonProperty("id")]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public string Id { get; set; }
(...)

如果这不起作用,第二个解决方案是为 id 分配一个 GUID。有关https://stackoverflow.com/a/59134407/14344821 的更多信息,请参阅此讨论。

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    相关资源
    最近更新 更多