Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这些虚拟表的意义是什么?_C#_.net_Entity Framework - Fatal编程技术网

C# 这些虚拟表的意义是什么?

C# 这些虚拟表的意义是什么?,c#,.net,entity-framework,C#,.net,Entity Framework,如果我使用实体框架导入模式,我的表会得到一些虚拟ICollection表,如果它们在其他表上有外键链接的话。例如: Table1 Id | ColumnA Table2 Id | Table1Id_fk | ColumnZ 其中,表1将作为此模型导入: public class Table1 { public Table1() { Table2s = new HashSet<Table2>(); } public int Id {

如果我使用实体框架导入模式,我的表会得到一些虚拟ICollection表,如果它们在其他表上有外键链接的话。例如:

Table1
Id | ColumnA

Table2
Id | Table1Id_fk | ColumnZ
其中,表1将作为此模型导入:

public class Table1
{
    public Table1()
    {
        Table2s = new HashSet<Table2>();
    }

    public int Id { get; set; }
    public string ColumnA { get; set; }
    public virtual ICollection<Table2> Table2s { get; set; } // added because of the fk on Table2
}
如果我将对象序列化为字符串响应,这样我就可以看到一个空的Table2s:[]在那里,我想知道这是否与此有关,但我的主要问题是


为什么会发生这种情况?重点是什么?我可以删除它们,但它不会停止工作,到目前为止,它只是让我的代码变得混乱,因为我不知道它们的用途://

实体框架基本上为您提供了方便。通过这种方式,在代码中,您可以将外键关系视为简单的属性,而无需自己进行连接

如果删除这些虚拟属性,则必须自己连接实体

获取与表1相关的所有表2项目

虚拟财产:

var allTable2s = table1Item.Table2s;
没有:

var allTable2s = dbContext.Table2s.Where(t2 => t2.Table1Id == table1Item.Id);

您还应该看看实体框架文档:。

实体框架基本上为您提供了方便。通过这种方式,在代码中,您可以将外键关系视为简单的属性,而无需自己进行连接

如果删除这些虚拟属性,则必须自己连接实体

获取与表1相关的所有表2项目

虚拟财产:

var allTable2s = table1Item.Table2s;
没有:

var allTable2s = dbContext.Table2s.Where(t2 => t2.Table1Id == table1Item.Id);

您还应该看看实体框架文档:。

我不确定您是否使用了EF Core,以及在构建模型时它是否成为标准。 但是:

有时,您需要虚拟集合来引用另一个实体,以避免EF一次又一次地重新创建该实体

想象一下你有一张有汽车的桌子

还有一张有小插曲的桌子

想象一下,您的汽车的一个属性是一组小插曲

如果要从Vignette表中检索2个Vignette并将其设置为汽车上的Vignette,EF默认情况下将假定这些Vignette是新实体,并将在数据库中为您创建它们。这可以,用漂亮的话来说。。。不受欢迎

现在,如果你把你的收藏变成虚拟的,它会突然变成EF的导航属性。它告诉EF

嘿,我只想要这方面的小插曲的参考资料 实体

因此,当您从EF上下文中对对象进行排队时,EF将获得实体的所有信息,然后查找引用的实体(本例中为渐晕图),并将它们填充到您的汽车实体中


它还为该系列启用了EF的延迟加载机制。

我不确定您是否使用了EF Core,以及在构建模型时它是否成为标准。 但是:

有时,您需要虚拟集合来引用另一个实体,以避免EF一次又一次地重新创建该实体

想象一下你有一张有汽车的桌子

还有一张有小插曲的桌子

想象一下,您的汽车的一个属性是一组小插曲

如果要从Vignette表中检索2个Vignette并将其设置为汽车上的Vignette,EF默认情况下将假定这些Vignette是新实体,并将在数据库中为您创建它们。这可以,用漂亮的话来说。。。不受欢迎

现在,如果你把你的收藏变成虚拟的,它会突然变成EF的导航属性。它告诉EF

嘿,我只想要这方面的小插曲的参考资料 实体

因此,当您从EF上下文中对对象进行排队时,EF将获得实体的所有信息,然后查找引用的实体(本例中为渐晕图),并将它们填充到您的汽车实体中

它还为该集合启用了EF的延迟加载机制