不允许在查询中显式构造实体类型
就像标题所说,我有以下例外:
描述:事件代码:3005事件消息:发生了未处理的exception。 exception信息:exception类型:NotSupportedExceptionexception消息:不允许在查询中显式构造实体类型“Company.Project.Core.Domain.Friend”。
我正在使用LINQ to SQL并在我的datacontext中使用以下代码:
var friends2 = ( from f in dc.Friends where f.MyFriendsAccountId == accountId where f.AccountId != accountId select new { f.FriendId, AccountId = f.MyFriendsAccountId, MyFriendsAccountId = f.AccountId, f.CreateDate, f.Timestamp }).Distinct(); result.AddRange( from o in friends2 select new Friend() { FriendId = o.FriendId, AccountId = o.AccountId, CreateDate = o.CreateDate, MyFriendsAccountId = o.MyFriendsAccountId, Timestamp = o.Timestamp });
最后的代码块抛出错误,我很确定这个声明是罪魁祸首:
.Select( o => **new Friend**
我应该如何重新编写代码以避免此错误?
无法使用LINQ查询创建属于数据上下文的实体。 这是C#团队经过深思熟虑的设计决策。 因为实体是在Select
语句中新建的(手动),这意味着它们不会被DataContext
跟踪,这可能会使开发人员感到困惑。 另一方面,当DataContext自动插入提交那些新建的实体时,这也会让人感到困惑。 剩下的唯一选择是与开发人员沟通,这不是一个好主意,这就是你所看到的。
如果您没有在Friends类的任何列上设置PrimaryKey,它将起作用。 这样,将不再为该类跟踪更改,但您的代码将起作用。
- 在上传之前确保上传文件的文件大小低于maxRequestLength?
- 从div onclick调用ASP.net函数/方法
- ExecuteNonQuery不返回结果
- CloudBlockBlob.DownloadToStream与DownloadRangeToStream
- 在ASP.NET 2.0中使用Login控件时,将值从一个页面传递到另一个页面
- 以编程方式检查页面是否需要基于web.config设置进行身份validation
- Castle Windsor ASP.NET MVC 4和Web API相同的应用程序。 只有MVC控制器没有依赖关系?
- 格式DropDownList.TextValue
- asp.net/C#中的静态变量