在运行期间以代码第一数据库方法添加表

时间:2018-02-28 04:35:31

标签: c# database entity-framework

我有一个默认情况下有一个表的数据库。此表包含项目的卡组列表或容器列表。每次我在该表中输入一个新的deck / container条目时,我还需要能够创建一个新表来保存容器内容。使用常规的SQL服务器方法,我知道我可以使用create table来实现这一目标,但是我所看到的任何地方似乎都无法使用Entity Framework实现类似的功能。真的吗?如果没有,我将如何在程序运行时创建表?

编辑:

默认表格只有2或3列(ID,名称和类型),其中与默认表格中的条目相关的表格将包含卡片详细信息。

1 个答案:

答案 0 :(得分:0)

实体框架更适用于数据访问。对于您的上述情况,您不希望在另一个表中创建每行的整个表,而是希望通过外键连接的链接表

表1 - 容器
id |容器的身份
名称|容器名称
Blah |所有其他列都需要

表2 - ContainerDetails
id | ContainerDetails的id
ContainerId | ForeignKey to Container
细节|容器的详细信息

以这种方式设置您的容器可以拥有不同的数据,您只需要构建基表,其方式将包含您将加入其中的所有数据。

例如假设您有2个容器,一个有3个甲板,另一个有5个甲板,您的数据最终会如下所示:

Table 1 - Containers
id - 1
Name - First persons Container
--
id - 2
Name - Second Persons Container

Table 2 - ContainerDetails
id - 1
ContainerId - 1
Name - First Deck for First Container
--
id - 2
ContainerId - 1
Name - Second Deck for First Container
--
id - 3
ContainerId - 1
Name - Third Deck for First Container
--
id - 4
ContainerId - 2
Name - First Deck for Second Container
--
id - 5
ContainerId - 2
Name - Second Deck for Second Container
--
id - 6
ContainerId - 2
Name - Third Deck for Second Container
--
id - 7
ContainerId - 2
Name - Fourth Deck for Second Container
--
id - 8
ContainerId - 2
Name - Fifth Deck for Second Container

现在从这里开始,假设我想将所有套牌分配到容器1(使用linq)

var query = db.Container.Include(o => o.ContainerDetails).Where(o => o.id == id).FirstOrDefault();

现在您有容器详细信息和分配给它的所有套牌。需要得到一个特定的牌组,只需继续流过每一行附着的id。