Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server关系中一个非常有趣的问题(SQL Server 2008R2、LINQ到SQL、Visual Studio 2010、C#)_C#_Sql Server_Linq To Sql_Relationship - Fatal编程技术网

SQL Server关系中一个非常有趣的问题(SQL Server 2008R2、LINQ到SQL、Visual Studio 2010、C#)

SQL Server关系中一个非常有趣的问题(SQL Server 2008R2、LINQ到SQL、Visual Studio 2010、C#),c#,sql-server,linq-to-sql,relationship,C#,Sql Server,Linq To Sql,Relationship,我在做一个网络项目。我通过LINQ To Sql使用Sql Server 20008 R2数据库,今天我遇到了一个非常奇怪的关系问题。我已经用了一段时间了,到目前为止还没有任何问题 假设我有一个表存储有以下字段:ID,Name,LastUserID,其中LastUserID是对Users表的“引用” 用户表具有以下字段:ID,Name,FavoriteStoreID,其中FavoriteStoreID是对Stores表的“引用” 所以我有一种递归关系 Store.LastUser.Name //

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

假设我有一个表
存储有以下字段:
ID
Name
LastUserID
,其中
LastUserID
是对
Users
表的“引用”

用户表具有以下字段:
ID
Name
FavoriteStoreID
,其中
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的designer中,如下所示:

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


 |   / \
 |    |
 |    |
\ /   |


----------
-        -
- Stores -
-        -
----------
现在的问题是,当有两个箭头(两个关系)时,其中只有一个有效。当我使用另一个时,我得到的
对象引用没有设置为对象的实例。
错误

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

很明显,我搞砸了一些事情,SQL Server不明白如何解释我希望它做什么


如何解决此问题?

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

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

问题在于设计者无法找出循环引用。我将通过在设计器中创建缺少的引用来处理此问题。

问题是设计器无法找出循环引用。我将通过在设计器中创建缺少的引用来处理此问题。

我不确定问题出在哪里,但我重新创建了表,现在它工作正常。因此LINQ To SQL确实可以使用循环引用。

我不确定问题出在哪里,但我重新创建了表,现在它工作正常。因此LINQ To SQL确实可以使用循环引用