我在使用.include()的语法时遇到麻烦,这个相关的问题使我进入了编译和运行的地步:
我用:
[ForeignKey("Id")]
public OtherTableModel OtherTableModel {get; set;}
这两个表具有完全相同的主键:
string id {get; set}
在我的控制器中,代码为:
ourList = db.Table1.Include(t => t.OtherTableModel)
不幸的是,尽管这在编译甚至运行的意义上都是可行的,但是当应该包含有效数据时,有时“ include”语句的结果为空。用作“外键”的“ Id”使得在实际的SQL Server中不会将其指定为外键,尽管相同的字符串将成为该表的主键。此SQL问题可能是问题的一部分。
当我使用由MVC调用的存储过程来检索其他表数据时,它可以工作,就像直接在SSMS中进行SQL查询一样(即所有行中都有有效数据,而不是null),但是include会返回一些有效数据行,但不是所有的数据行(我真的根本不理解,我认为它总是可以工作或总是失败,但是自从最初发布以来,我发现了更多的见解,请参阅下文)。还有是在桌上摆着一个空将是有效的可能的数据行,但是,也有很多时候返回的数据为空时,它不应该。自最初发布以来,我发现了这一点:
在这种情况下,密钥ID [两个表]的字符串的长度限制为最多8个字符(即最大)。当它恰好是8个字符时,从另一张表中的.include加载是正确的;当它不是恰好8个字符(即小于8个)时,将返回null。也许请有人可以详细说明这是为什么,并提出解决方案。假设表不能更改,请使用不同长度的ID。
有人有见识吗?
提前致谢!
如果您的数据库列是char
或nchar
,则可能是问题所在。在SQL Server中,两者char
和nchar
都会用空格右填充数据。因此,如果您的值为“ 1234567”,则数据库中存储的实际值为“ 1234567”(请注意尾随空格)。这是假设一个char(8)
或nchar(8)
。
对于列数据类型varchar
和nvarchar
,将不会发生填充。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句