首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq.EntitySet的枚举

Linq.EntitySet的枚举
EN

Stack Overflow用户
提问于 2014-09-29 06:23:44
回答 3查看 756关注 0票数 0

我对.net和C#非常陌生,对我来说这似乎是一个基本的问题,但是搜索或调试还没有解决这个问题。

我在存储库类中有以下代码:

代码语言:javascript
复制
// 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>)。我的控制器就这样做了:

代码语言:javascript
复制
List<APIDocument> transformed = new List<APIDocument>();

foreach(Document document in documents)
{
    transformed.Add(this.PrepareModelForResponse(document));
}

return transformed;

PrepareModelForResponse代码

代码语言:javascript
复制
private APIDocument PrepareModelForResponse(Document document)
{
    APIDocument response = new APIDocument();
    response.setPropertiesFromObject(document);
    return response;
}

我正在为输出准备每个文档(这段代码是API的一部分),当我这样做时会发生错误:

代码语言:javascript
复制
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,下面是堆栈跟踪:

代码语言:javascript
复制
   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对象,该视图指示数据已正确加载,因此我不确定这里缺少什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-30 05:31:53

因此,经过大量的混乱之后,我重新创建了我的部分类,方法是删除dbml文件中的所有内容,并将所有表拖回原处。

我生成的类文件与数据库之间存在不一致性,因此解析DocumentFrame对象将返回一个错误,不管它是在什么上下文中发生的。

票数 0
EN

Stack Overflow用户

发布于 2014-09-29 06:36:35

这里不需要显式联接和查询,因为EntityFramework已经知道如何与DocumentFrames连接。

代码语言:javascript
复制
var options = new DataLoadOptions();
options.LoadWith<Document>(d => d.DocumentFrames);
db.LoadOptions = options;

var results = db.Documents.ToList();
票数 0
EN

Stack Overflow用户

发布于 2014-09-29 06:37:26

如果使用的是实体框架,则可以使用关系和导航属性访问document.DocumentFrames。检查这个链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26093644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档