Phi*_*hil 1 c# entity-framework
我对 C# 很陌生,我正在开发一个小应用程序来测试实体框架上的代码优先方法。
我的应用程序有一个类 Download,其中包含以下属性:
[Key]
public int DownloadId { get; set; }
public string URL { get; set; }
public Boolean IsFinished { get; set; }
[Column(TypeName = "nvarchar(MAX)")]
public string Contents { get; set; }
Run Code Online (Sandbox Code Playgroud)
在我的 Main 方法中,我创建了一些对多个网页的 HTTP GET 请求,并使用 DbContext 将它们的响应插入到 Contents 列中:
//Persist the download first without contents, just the URL
context.Downloads.Add(d);
context.SaveChanges();
// Create request
request = WebRequest.Create(d.URL);
request.Method = "GET";
response = request.GetResponse();
dataStream = response.GetResponseStream();
reader = new StreamReader(dataStream);
responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
d.Contents = responseFromServer;
Console.WriteLine("d.Contents= " + d.Contents);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
它适用于大多数页面。每当页面稍大一点时(这意味着更长的字符串),内容为空。
我测试了字符串的内容(参见上面最后一行),我得到了网页的完整内容,这意味着问题正好在最后一行(contexto.SaveChanges())。换句话说, a 有一个相对较大的字符串,它应该被持久化到 NVARCHAR(MAX) 列,并且由于某种原因它没有被持久化。
有任何想法吗?
我发现出了什么问题。如果 NVARCHAR(MAX) 列的长度超过 43679 字节,即使数据存在,Visual Studio 中的服务器资源管理器也不会显示该列的内容。
此外,下载发生在线程上下文中;当页面很大时,我在下载完成之前查询数据库,因此得到一个空答复。