我对.net和C#非常陌生,对我来说这似乎是一个基本的问题,但是搜索或调试还没有解决这个问题。
我在存储库类中有以下代码:
// Attempt #1
var results = from d in db.Documents
join f in db.DocumentFrames on d.Id equals f.DocumentId
select d;
return results.ToList();
// Attempt #2
var options = new DataLoadOptions();
options.LoadWith<Document>(d => d.DocumentFrames);
db.LoadOptions = options;
var results = db.Documents.ToList();代码返回我所期望的(一个List<Document>)。我的控制器就这样做了:
List<APIDocument> transformed = new List<APIDocument>();
foreach(Document document in documents)
{
transformed.Add(this.PrepareModelForResponse(document));
}
return transformed;PrepareModelForResponse代码
private APIDocument PrepareModelForResponse(Document document)
{
APIDocument response = new APIDocument();
response.setPropertiesFromObject(document);
return response;
}我正在为输出准备每个文档(这段代码是API的一部分),当我这样做时会发生错误:
public void setPropertiesFromObject(Document document)
{
this.Id = document.Id;
this.OriginalFileUrl = document.OriginalFileUrl;
this.CreatedAt = document.CreatedAt;
foreach (DocumentFrame frame in document.DocumentFrames)
{
APIDocumentFrame newFrame = new APIDocumentFrame();
newFrame.setPropertiesFromObject(frame);
this.DocumentFrames.Add(newFrame);
}
}我在foreach语句上得到了一个“指定的强制转换无效”的InvalidCastException,下面是堆栈跟踪:
at System.Data.SqlClient.SqlBuffer.get_Byte()
at System.Data.SqlClient.SqlDataReader.GetByte(Int32 i)
at Read_DocumentFrame(ObjectMaterializer`1 )
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
at System.Data.Linq.EntitySet`1.Load()
at System.Data.Linq.EntitySet`1.GetEnumerator()
at InDesignAPI.Models.API.APIDocument.setPropertiesFromObject(Document document) in c:\FakeProjectPath\Models\API\APIDocument.cs:line 23
at InDesignAPI.Controllers.DocumentsController.PrepareModelForResponse(Document document) in c:\FakeProjectPath\Controllers\DocumentsController.cs:line 144
at InDesignAPI.Controllers.DocumentsController.GetDocument(Int32 id) in c:\FakeProjectPath\Controllers\DocumentsController.cs:line 42
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)我能否以列表中的文档自动包含DocumentFrames的方式更改我的查询?
在调试此问题时,如果我单击调试窗格中的“结果”视图,document.DocumentFrames将显示DocumentFrames对象,该视图指示数据已正确加载,因此我不确定这里缺少什么。
发布于 2014-09-30 05:31:53
因此,经过大量的混乱之后,我重新创建了我的部分类,方法是删除dbml文件中的所有内容,并将所有表拖回原处。
我生成的类文件与数据库之间存在不一致性,因此解析DocumentFrame对象将返回一个错误,不管它是在什么上下文中发生的。
发布于 2014-09-29 06:36:35
这里不需要显式联接和查询,因为EntityFramework已经知道如何与DocumentFrames连接。
var options = new DataLoadOptions();
options.LoadWith<Document>(d => d.DocumentFrames);
db.LoadOptions = options;
var results = db.Documents.ToList();发布于 2014-09-29 06:37:26
如果使用的是实体框架,则可以使用关系和导航属性访问document.DocumentFrames。检查这个链接
https://stackoverflow.com/questions/26093644
复制相似问题