相关疑难解决方法(0)

实体框架 - 代码优先 - 无法存储列表<String>

我写了这样的课:

class Test
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    public List<String> Strings { get; set; }

    public Test()
    {
        Strings = new List<string>
        {
            "test",
            "test2",
            "test3",
            "test4"
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

internal class DataContext : DbContext
{
    public DbSet<Test> Tests { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

运行代码后:

var db = new DataContext();
db.Tests.Add(new Test());
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我的数据正在保存但只是保存Id.我没有任何表格,也没有适用于字符串列表的关系.

我究竟做错了什么?我也尝试制作字符串, virtual但它没有改变任何东西.

谢谢您的帮助.

.net c# entity-framework

82
推荐指数
9
解决办法
7万
查看次数

使用 Cosmos DB 配置 EF Core 以存储字符串的 ICollection

实体框架有一些关于嵌入实体的很好的文档,但我不知道如何嵌入一个简单的字符串数组IEnumerable<string>

样板课

public class Post {
  public string Id {get;set;}
  public string Content {get;set;}
  public IEnumerable<string> Tags {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

这应该在 cosmos 中保存为:

{
  "id": "xxx",
  "content": "long content here",
  "tags": ["tag1", "tag2"],
  ...
}
Run Code Online (Sandbox Code Playgroud)

我知道我必须在OnModelCreating(ModelBuilder modelBuilder)上下文中配置一些东西。但我无法正确设置它。

我尝试过以下选项(以及其他几种ToJsonProperty方法):

  • modelBuilder.Entity<Post>().OwnsMany(p => p.Tags);
  • modelBuilder.Entity<Post>().OwnsMany<string>(p => p.Tags);

最终我希望能够根据这些标签进行查询,非常感谢任何帮助或正确方向的指示!

我也找到了这个答案,但是将数组转换为逗号分隔的字符串会达不到目的(因为这不允许我们查询这些帖子)。

其他人在 Microsoft 论坛上问了大致相同的问题,其中一位 Microsoft 员工表示,在纯 CosmosDB 中,可以在 cosmos 中嵌入字符串数组。

c# entity-framework-core azure-cosmosdb azure-cosmosdb-sqlapi

7
推荐指数
1
解决办法
1959
查看次数