gpt4 book ai didi

c# - 如何通过 Entity Framework 存储可变二维数组?

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:02 24 4
gpt4 key购买 nike

我有一个二维值数组,它的大小可以变化(不过,如果需要,我可以制作一个较大的固定大小),我想将其存储在数据库中。谁能告诉我执行此操作的最佳方法?

最佳答案

对我来说,二维数组听起来像 (x,y) = somevalue .所以我在想一些简单的事情,像这样(假设 somevalue 是一个 int ):

public interface IArrayValueEntity
{
int ArrayIndexX { get; set; }
int ArrayIndexY { get; set; }
int Value { get; set; }
}

实体类型是这样实现的(或者如果你愿意,你也可以只实现):

public class ArrayValue : IArrayValueEntity
{
public int ArrayIndexX { get; set; }
public int ArrayIndexY { get; set; }
public int Value { get; set; }
}

然后你可以制作ArrayIndexXArrayIndexY在覆盖 OnModelCreating 时成为实体的主键(并让 EF 强制执行这两个值组合的唯一性)你的方法 DbContext如果您要代码优先

public class MyDbContext : DbContext
{
public IDbSet<ArrayValue> ArrayValues { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// there are several options here...
}
}

如果您一开始就没有数据库,EF 可以根据您配置实体的方式为您创建(默认情况下,如果我没记错的话)。

然后您可以拥有一项服务,为您提供给定 (x,y) 的值键,和/或另一个让你......你的二维数组。

编辑

要解决二维数组是 map 实体“一部分”的问题,您只需定义导航属性 - 如果您愿意,您还可以定义一个外键属性:

public class Map : IMapEntity
{
public int Id { get; set; } // primary key
public string Description { get; set; }
public DateTime DateCreated { get; set; }
public DateTime? DateUpdated { get; set; }

// Navigation property on the "one" side (note "virtual ICollection")
public virtual ICollection<ArrayValue> ArrayValues { get; set; }
}

public class ArrayValue : IArrayValueEntity
{
public int ArrayIndexX { get; set; }
public int ArrayIndexY { get; set; }
public int Value { get; set; }

// FK property
//public int MapId { get; set; }

// Navigation property on the "many" side (note "virtual")
public virtual Map Map { get; set; }
}

使用 modelBuilderOnModelCreating或修饰实体类成员的属性,然后配置这些关系:

modelBuilder.Entity<Map>().HasMany(e => e.ArrayValues)
.WithRequired(e => e.Map);

关于c# - 如何通过 Entity Framework 存储可变二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221507/

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