在数据库中移动磁贴/文本框存储位置



我有25个房间,每个房间的位置都可以容纳一个或多个唯一标识的对象。我想为对象创建一个拖放系统,将位置存储在SQL数据库中,该数据库已经设置好并正在使用中。我当前查找对象,然后手动键入所需的位置。我正在寻找一种图形化的拖放方式来实现这一点。我不知道从哪里开始实现这一点。我甚至在想,也许游戏引擎是一个不错的选择,Godot或Unity。这是我对.movable tiles 的看法的示例图片

所以您有RoomsStoredItems。每个Room包含零个或多个StoredItems,每个StoredItem正好存储在一个Room中。

这是一个简单的一对多关系。在关系数据库中,这是通过给出"上的项来实现的;许多";侧面是一个外键,指的是它所属项目的主键。

在您的情况下:RoomsStoredItems都获得一个唯一的主键。StoredItems还获得一个外键,该外键指的是存储该项目的Room的Id。

设置数据库的一种简单而直观的方法是使用nuget包实体框架。

如果您使用实体框架,您可以使用标准C#执行几乎所有的查询。实体框架会将它们翻译成数据库语言,通常是SQL。

如果您使用实体框架,您将拥有以下类:

public class Room
{
    public int Id {get; set;}
    public string Name {get; set;}
    ... // other properties
    // every Room contains zero ore more StoredItems (one-to-many)
    public virtual ICollection<StoredItem> StoredItems {get; set;}
}
public class StoredItem
{
    public int Id {get; set;}
    ... // other properties
    // Every StoredItem is stored in exactly one Room, using foreign key
    public int RoomId {get; set;}
    public virtual Room Room {get; set;}
}

所以你会有以下表格

Room         StoredItem  
Id ..        Id RoomId ...
01 ...       01 01
02 ...       02 01
Etc.         03 03
             04 02
             05 02
             06 05

从这些表中,您可以看到StoredItem[0]存储在Room[02]中,而Room[01]包含两个StoredItems,即StoredItem[01]和[02]

如果你想了解更多关于实体框架的信息,请访问实体框架教程

最新更新