【问题标题】:Entity Framework 4.1 - Foreign Key Indexs?实体框架 4.1 - 外键索引?
【发布时间】:2011-04-04 03:23:30
【问题描述】:

我首先使用的是 EF 4 代码,我在这里玩得很开心。我不断收到错误:

{"Introducing FOREIGN KEY constraint 'SalesRepresentative_SalesOrders' on table 'SalesOrders' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors."}

考虑以下代码。如果我注释掉外键 ID 字段,它会生成自己的字段并且可以正常工作,但如果我不这样做,则会收到错误消息。

Public Class SalesOrder
        Inherits EntityBase(Of SalesOrder)

#Region "Members/Properties"

        Public Property ID As Integer
        'Public Property CustomerID As Integer
        'Public Property CustomerLocationID As Integer
        'Public Property SalesRepresentativeID As Integer
        'Public Property SalesOrderStatusID As Integer

        Public Overridable Property Customer As Customer
        Public Overridable Property CustomerLocation As CustomerLocation
        Public Overridable Property Items As ICollection(Of SalesOrderItem)
        Public Overridable Property Status As SalesOrderStatus
        Public Overridable Property SalesRepresentative As SalesRepresentative

#End Region

    End Class

Public Class SalesRepresentative
        Inherits EntityBase(Of SalesRepresentative)

#Region "Members/Properties"

        Public Property ID As Integer

        Public Property FirstName As String
        Public Property LastName As String

        Public Overridable Property Customers As ICollection(Of Customer)
        Public Overridable Property SalesOrders As ICollection(Of SalesOrder)

#End Region

    End Class

所以我想知道一些事情:

我是否必须创建外键 属性和导航 财产?我只是创建 孩子的导航属性 目的?我只是创建 父级上的导航属性 对象?

有人有什么想法吗?谢谢!!

【问题讨论】:

  • 我更喜欢“指数”......但这只是我。 :)

标签: entity-framework entity-framework-4.1


【解决方案1】:

您不必在两边都创建导航属性,但您必须创建它at least on one side 才能在数据库中创建关系。

您也不必为外键使用属性。此属性在 independent and foreign key association 之间有所不同。只是说使用外键属性违背了 ORM 的想法,但它使使用 EF 更容易。

评论FK的部分很有趣。您能否在数据库中验证关系是否已创建以及它们是如何配置的(级联删除)?

【讨论】:

  • 我发现如果我不定义FK,EF会在数据库中创建它,但是它可以为空。所以这有点糟糕!所以我在想,为了得到你想要的,你需要在关系的子端定义 key 和 nav 属性,然后在父对象上定义 nav 属性?至少是父级的 nav 属性和子级的 FK?
  • 是的,当我注释掉属性时,它确实创建了关系,但是 FK 可以为空。
  • 你不需要导航。两边的属性。在流畅的映射中,您可以使用.HasOptional.HasRequired 来定义导航。 FK 端的属性是否可以为空。
猜你喜欢
  • 2011-07-23
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多