我开发它利用所使用的两个应用程序SQL数据库的现有应用程序。 一个使用实体框架连接到数据库。 另一个使用LINQ到SQL。 SQL数据库的设计,使有数字显示在两个表行之间的许多一对多的关系,一些表。 实体框架似乎没有导入这些表,显然是因为它有多少一对多的关系应该被代表的一些面向对象的思想。 到目前为止,实体框架应用程序并不需要知道这些表,但现在它应该。 我不知道如何工作的,我很担心,即使我了解实体框架的表示这些关系激动人心的新方式,它不会与其他应用程序或其他设计使用很多数据库很好地合作一对多表。
即存在FOOS的表,和酒吧的表,然后用Foo和酒吧ID的表列出了FOOS涉及到哪个酒吧,我不想停止使用这个关系表,特别是因为有是大量使用这个关系表另一个LINQ的应用。
问题:
如果我学会用实体框架的许多一对多的系统,它会使用和更新,其他应用程序使用的许多一对多表?
如果不是,有什么好办法让实体框架不能忽视许多一对多关系表,所以我可以编写代码来使用现有的表?
是的,实体框架会管理你多到很多表给你。 纯链接表(即只有两个外键列)在EF被表示为的关系,而不是POCO对象。 这样做的方式是你告诉EF有你的两个对象之间的关系,该表X是这种关系的存储位置。 如在EF 4.1的例子。 这就是我目前使用这像这样做:
modelBuilder.Entity<Foo>() //Let me tell you about Foo...
.HasMany(f => f.Bars) //The property in the Foo class that links to Bar objects is Bars
.WithMany(b => b.Foos) //The property in the Bar class that links to Foo objects is Foos
.Map(m => {
m.MapLeftKey("FooID"); //Name of the foreign key column in the link table for Foo
m.MapRightKey("BarID"); //Name of the foreign key column in the link table for Bar
m.ToTable("FooBar"); //Name of the link table
});
然后,您可以通过链接/在你的代码断开链接对象更改此表。 你很可能做这样的事情
myFoo.Bars.Add(myBar); //Add a row to the link table
myFoo.Bars.Remove(myBar) //Delete a row from the link table
对于全面实施,你应该Google的EF版本。
在包含额外的列(例如创建日期)链接表的情况下,他们通过POCO就像所有其他的表来表示。 如果你真的偏执EF的管理你的链接表,你可以强制通过添加一个唯一的ID列到你的纯链接表走这条路线的能力,但我肯定会反对的意见。
想想这样说:EF已经有一段时间了,并已取得了一定的成熟度。 的事实,许多到许多关系都没有在数据库中究竟罕见结合这一点。 你真的认为EF的设计还没有处理您的案件?