Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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
C# MVC-EF逆向工程代码first include Other table在应该有数据时返回空值_C#_Sql Server_Entity Framework_Asp.net Mvc 5_Foreign Key Relationship - Fatal编程技术网

C# MVC-EF逆向工程代码first include Other table在应该有数据时返回空值

C# MVC-EF逆向工程代码first include Other table在应该有数据时返回空值,c#,sql-server,entity-framework,asp.net-mvc-5,foreign-key-relationship,C#,Sql Server,Entity Framework,Asp.net Mvc 5,Foreign Key Relationship,我在.Include()的语法方面遇到了问题,这个相关的问题使我达到了编译和运行它的地步: 我使用: [ForeignKey("Id")] public OtherTableModel OtherTableModel {get; set;} 两个表具有完全相同的主键: string id {get; set} 在我的控制器中,代码是: ourList = db.Table1.Include(t => t.OtherTableModel) 不幸的是,尽管这在编译甚至运

我在.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个),返回空值。也许有人可以详细说明原因并提出修复建议。请假设无法更改表,并且我们必须使用不同长度的id

有人有什么见解吗

提前感谢!

如果您的数据库列是
char
nchar
,这可能就是问题所在。在SQL Server中,
char
nchar
都将用空格右键填充数据。因此,如果您的值是“1234567”,则数据库中存储的实际值是“1234567”(注意尾随空格)。这是假设一个
char(8)
nchar(8)


对于列数据类型
varchar
nvarchar
,将不进行填充。

重要更新:在这种情况下,字符串id限制为8个字符。当字符串id正好为8个字符时,从另一个表加载的.include是正确的,而不是正好为8个字符(即小于8个),返回空值。也许有人可以详细说明原因并提出修复建议。假设表无法更改,我们必须使用不同长度的id。请尝试记录EF生成的SQL。谢谢。非常感谢。字符串id列的列类型是什么在数据库中?是char、nchar、varchar还是nvarchar?如果是char或nchar,这可能就是问题所在。我这样问是因为char和nchar列右键填充数据,“1234567”与“1234567”不同一个表是varchar(8),另一个表是char(8),这可能是一个很好的解释!更改数据库可能太晚了。很好。在这种情况下,一个表是varchar(8),另一个表是char(8),这可能是一个很好的解释!更改数据库可能太晚了database@JosephDoggie您应该能够使用char(8)在表上运行ALTERCOLUMN语句.SQL Server可能会就截断向您发出警告,但只要新列类型为长度为8或更大的varchar或nvarchar,就不应进行实际截断。在我的工作场所,获取执行此操作的权限是禁止的,但无论如何,谢谢!