【发布时间】:2014-07-25 20:39:53
【问题描述】:
我阅读了 Julie Lerman 和这里关于 SO 的一些帖子,试图弄清楚如何配置 2 个实体之间的关系。我使用 EF Code First 从现有数据库生成类,我无法控制该数据库并且已经有大量数据。在一个表中PostId 是guid 而PostRowID 是PK。当我修改类以尝试建立关系时,我最终得到错误Invalid object name 'dbo.be_PostTagbe_Posts'. 大多数(如果不是全部)示例似乎处理的是 Code First 而不是 DB 中的 Code First。如何映射 2 个类之间的关系?还是我需要第三张表来映射关系?
我也看了 fluent api 并做到了这一点:
modelBuilder.Entity(Of be_Posts)().HasMany(Function(a)
a.be_PostTag).WithMany().Map(Function(x)
x.MapLeftKey("PostID")x.MapRightKey("PostID") 'Don't know what to do next
发生这种情况时,我正在尝试使用Include 语法。我添加了 2 个 ICollection 属性,但我怀疑由于 db 偏离了 EF 约定,这就是 EF 无法弄清楚这种关系的原因。
Partial Public Class be_Posts
<Key>
Public Property PostRowID As Integer
Public Property BlogID As Guid
Public Property PostID As Guid
'Other Stuff
Public Property be_PostTag As ICollection(Of be_PostTag)
End Class
还有
Partial Public Class be_PostTag
<Key>
Public Property PostTagID As Integer
Public Property BlogID As Guid
Public Property PostID As Guid
'Other stuff
Public Property be_Posts As ICollection(Of be_Posts)
End Class
包括:
Using db As New BetterBlogContext
post = db.be_Posts.OrderByDescending(Function(x)
x.DateCreated).Include("be_PostTag").Where(Function(p) p.PostRowID
= id).FirstOrDefault
End Using
【问题讨论】:
-
这在 db 上是什么样子的?有连接表吗?
-
标签和帖子没有连接表。 be_PostTag 有
PostTagID as int, PostID as uniqueidentifier, BlogID as uniqueidentifier, PostID as uniqueidentified and Tag as NVARCHAR(50) -
使用现有代码,您已经映射了多对多关系,因此需要一个名为“be_PostTagbe_Posts”的连接表。这两个实体之间的预期关系是什么?
-
一个帖子可以有很多标签,很多标签可以关联很多帖子。但如果我现在能得到一篇有很多标签的帖子,我会很高兴。
-
您说您使用 Code First 但这意味着您编写代码并且 EF 生成数据库。你真的是说数据库优先吗?
标签: vb.net entity-framework fluent entity-framework-6.1