Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.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# EF中一对多的最佳方法_C#_Entity Framework_One To Many - Fatal编程技术网

C# EF中一对多的最佳方法

C# EF中一对多的最佳方法,c#,entity-framework,one-to-many,C#,Entity Framework,One To Many,我想问你们,这两种方法有什么不同 情景1 公共类Foo { 公共int FooId{get;set;} 公共虚拟条{get;set;} } 公共类酒吧 { 公共int BarId{get;set;} } 场景2 公共类Foo { 公共int FooId{get;set;} 公共int BarId{get;set;} 公共虚拟条{get;set;} } 公共类酒吧 { 公共int BarId{get;set;} 公共虚拟ICollection Foos{get;set;} } 在这两种情况下,

我想问你们,这两种方法有什么不同

情景1

公共类Foo
{
公共int FooId{get;set;}
公共虚拟条{get;set;}
}
公共类酒吧
{
公共int BarId{get;set;}
}
场景2

公共类Foo
{
公共int FooId{get;set;}
公共int BarId{get;set;}
公共虚拟条{get;set;}
}
公共类酒吧
{
公共int BarId{get;set;}
公共虚拟ICollection Foos{get;set;}
}
在这两种情况下,EF将生成具有适当列和外键的表。那么,这是一种情况比另一种情况好吗


对不起我的英语,谢谢你的帮助:)

没有好坏之分

在这两种情况下,首先从代码中扣除的EDM模型非常相似(可能相等)

但是有一个非常重要的区别:在第二种情况下,您可以访问第一种情况中缺少的一些内容:

  • Foo中的
    BarId
  • Bar中的
    Foos
从这个差异中可以看出内存中的EDM模型,对该模型进行查询的行为将是相同的


因此,唯一的问题是:您是否需要从
访问
Foos
?您是否需要访问
Foo
中的
BarId
?这是唯一真正的区别。

什么意义上的“区别”?您在第二个场景中添加了
virtual
,这肯定是一个区别,但可能不是您所问的区别#1将无法使用
public Bar{get;set;}
和没有
public int BarId{get;set;}
哦,是的,我应该先检查一下。但这在第一个场景中是有效的,没有公共int-BarId{get;set;}
的情况下,这里有一些关于外键的背景知识,为什么实体框架会将现有对象重新插入到我的数据库中?不用外键就可以了谢谢你JotaBe!我只是想确保这是同样的工作方式。