MVC-EF 逆向工程代码首先在应该有数据时包含另一个 table returns 空值
MVC-EF Reverse Engineer Code first include another table returns nulls when there should be data
我在使用 .Include() 的语法时遇到了问题,这个相关问题让我想到了编译和 运行 的地步:
我使用:
[ForeignKey("Id")]
public OtherTableModel OtherTableModel {get; set;}
两个 table 具有完全相同的主键:
string id {get; set}
在我的控制器中,代码是:
ourList = db.Table1.Include(t => t.OtherTableModel)
不幸的是,虽然这在编译甚至 运行 的意义上是有效的,但有时当应该有有效数据时,"Include" 语句的结果为空。用作 "foreign key" 的 "Id" 是这样的,在实际的 SQL 服务器中它是 not 指定为外键,尽管相同的字符串将成为 table 的主键。这个 SQL 问题可能是问题的一部分。
当我使用 MVC 调用的存储过程来检索其他 table 数据时,它可以正常工作,就像直接在 SSMS 中进行 SQL 查询一样(即 [=36 中有有效数据) =]所有行,而不是空值)但包括returns一些有效数据行,但不是所有数据行(我真的不完全不明白,我认为它会 总是工作 或 总是失败 ,但是自最初发布以来我发现了更多见解,请参阅以下)。在 table 中有 个可能的数据行,其中 null 是有效的,但是,很多时候返回的数据不应该是 null。自最初发布以来,我发现了这一点:
在这种情况下,密钥 ID [两个 tables] 的字符串长度限制为最多 8 个字符(即最大值)。当正好是8个字符时,从另一个table加载的.include是正确的,当它不是正好8个字符(即小于8)时,返回null。也许请有人可以详细说明这是为什么并提出修复建议。假设 table 不能更改,我们必须忍受不同长度的 id,拜托。
有没有人有任何见解?
提前致谢!
如果您的数据库列是 char
或 nchar
,那可能就是问题所在。在SQL服务器中,char
和nchar
都会用白色space右填充数据。因此,如果您的值为“1234567”,则存储在数据库中的实际值为“1234567”(注意尾随 space)。这是假设 char(8)
或 nchar(8)
.
对于列数据类型 varchar
和 nvarchar
,不会出现填充。
我在使用 .Include() 的语法时遇到了问题,这个相关问题让我想到了编译和 运行 的地步:
我使用:
[ForeignKey("Id")]
public OtherTableModel OtherTableModel {get; set;}
两个 table 具有完全相同的主键:
string id {get; set}
在我的控制器中,代码是:
ourList = db.Table1.Include(t => t.OtherTableModel)
不幸的是,虽然这在编译甚至 运行 的意义上是有效的,但有时当应该有有效数据时,"Include" 语句的结果为空。用作 "foreign key" 的 "Id" 是这样的,在实际的 SQL 服务器中它是 not 指定为外键,尽管相同的字符串将成为 table 的主键。这个 SQL 问题可能是问题的一部分。
当我使用 MVC 调用的存储过程来检索其他 table 数据时,它可以正常工作,就像直接在 SSMS 中进行 SQL 查询一样(即 [=36 中有有效数据) =]所有行,而不是空值)但包括returns一些有效数据行,但不是所有数据行(我真的不完全不明白,我认为它会 总是工作 或 总是失败 ,但是自最初发布以来我发现了更多见解,请参阅以下)。在 table 中有 个可能的数据行,其中 null 是有效的,但是,很多时候返回的数据不应该是 null。自最初发布以来,我发现了这一点:
在这种情况下,密钥 ID [两个 tables] 的字符串长度限制为最多 8 个字符(即最大值)。当正好是8个字符时,从另一个table加载的.include是正确的,当它不是正好8个字符(即小于8)时,返回null。也许请有人可以详细说明这是为什么并提出修复建议。假设 table 不能更改,我们必须忍受不同长度的 id,拜托。
有没有人有任何见解?
提前致谢!
如果您的数据库列是 char
或 nchar
,那可能就是问题所在。在SQL服务器中,char
和nchar
都会用白色space右填充数据。因此,如果您的值为“1234567”,则存储在数据库中的实际值为“1234567”(注意尾随 space)。这是假设 char(8)
或 nchar(8)
.
对于列数据类型 varchar
和 nvarchar
,不会出现填充。