【问题标题】:How to configure relationship between classes in an existing db in EF Code First from Database?如何在数据库中的 EF Code First 中配置现有数据库中的类之间的关系?
【发布时间】:2014-07-25 20:39:53
【问题描述】:

我阅读了 Julie Lerman 和这里关于 SO 的一些帖子,试图弄清楚如何配置 2 个实体之间的关系。我使用 EF Code First 从现有数据库生成类,我无法控制该数据库并且已经有大量数据。在一个表中PostIdguidPostRowIDPK。当我修改类以尝试建立关系时,我最终得到错误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


【解决方案1】:

在不使用 Fluent API 的情况下搞定。添加 2 个 ICollection 属性后,我必须手动添加表 Entity Framework 和适当的 2 列来处理关系。运行 SQL 命令来复制所需的数据,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多