【问题标题】:A very interesting problem with SQL Server Relationships (SQL Server 2008R2, LINQ To SQL, Visual Studio 2010, C#)SQL Server 关系的一个非常有趣的问题(SQL Server 2008R2、LINQ To SQL、Visual Studio 2010、C#)
【发布时间】:2010-10-09 16:14:39
【问题描述】:

我正在做一个网络项目。我正在通过 LINQ To SQL 使用 Sql Server 20008 R2 数据库,今天我遇到了一个非常奇怪的关系问题。我已经使用它们一段时间了,到目前为止从未遇到任何问题。

假设我有一个表Stores,其中包含以下字段:IDNameLastUserID 其中LastUserID 是对Users 表的“引用”。

Users 表具有以下字段:IDNameFavoriteStoreID 其中FavoriteStoreID 是对 Stores 表的“引用”。

所以我有点递归关系。

Store.LastUser.Name // shows the name of the last user of the store

User.FavoriteStore.Name // shows the name of user's favorite store.

在 Visual Studio 的设计器中,如下所示:

----------
-        -
- Users  -
-        -
----------


 |   / \
 |    |
 |    |
\ /   |


----------
-        -
- Stores -
-        -
----------

现在的问题是,当有两个箭头(两个关系)时,只有一个有效。当我使用另一个时,我收到Object reference not set to an instance of an object. 错误。

当我重新创建表时,首先添加该关系(引发异常的那个),它可以工作。但是当我添加另一个时,它就不起作用了。

很明显我搞砸了,SQL Server 不明白如何解释我想要它做的事情。

我该如何解决这个问题?

【问题讨论】:

    标签: c# sql-server linq-to-sql relationship


    【解决方案1】:

    问题是设计者无法弄清楚循环引用。我会通过在设计器中创建缺失的引用来处理这个问题。

    【讨论】:

      【解决方案2】:

      听起来您只需要一个实体关联就设置了两个实体关联,这可能会使 LINQ to SQL 混淆。在您的 dbml 设计器中,尝试仅在您的用户和商店表之间设置一个关联,并在关联属性中,将基数设置为 OneToOne,这应该在您的用户和商店实体上创建子属性和父属性。即使两个表之间只有一个关联,您仍然应该能够从 User 对象获取 Store 并从 Store 对象获取 User。

      【讨论】:

        【解决方案3】:

        我不确定是什么问题,但我重新创建了表,现在它可以正常工作了。所以 LINQ To SQL DOES 可以处理循环引用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-26
          • 1970-01-01
          • 1970-01-01
          • 2014-05-09
          相关资源
          最近更新 更多