【发布时间】:2014-01-28 17:33:11
【问题描述】:
我正在尝试执行左外连接。它似乎工作正常,但是当我的 Friends 表为空时我遇到了问题。
例如,Users 表具有与 Table Friends (id) 列相关的外键 (friendId)。
有时虽然我的用户不会与朋友链接,但我收到此错误: 无法创建类型为“PandaBrew.Models.FriendModel”的空常量值
我该如何处理?
回购代码:
var authUser = (from u in db.Users
join f in db.Friends on u.FriendId equals f.Id into jointable
from j in jointable.DefaultIfEmpty()
where u.EmailAddress == user.EmailAddress
select new UserModel
{
Id = u.Id,
CreatedOn = u.CreatedOn,
EmailAddress = u.EmailAddress,
FriendId = u.FriendId,
RoleId = u.RoleId,
PasswordHash = u.PasswordHash,
Friend = u.FriendId != null ? new FriendModel()
{
Alias = j.Alias,
CarrierId = j.Id,
CreatedOn = j.CreatedOn,
FirstName = j.FirstName,
Id = j.Id,
LastName = j.LastName,
Locked = j.Locked,
PhoneNumber = j.PhoneNumber,
SteamId = j.SteamId,
} : null,
}).SingleOrDefault();
当没有friendId时我尝试将Friend设置为null,但它不起作用。
【问题讨论】:
-
我通常通过创建一个空的(在这种情况下)FriendModel 而不是 null 然后检查它(然后可能将 Friend 设置为 null)来解决这个问题。不是你的代码有问题,是 EF 有问题。
-
嗯,你能告诉我你的意思吗?因为当我将它设置为空时,我仍然得到一个错误。
-
我的意思是最简单的形式: .. Friend = u.FriendId != null ? new FriendModel() { ... } : new FriendModel(), ... 然后执行类似“if (authUser.Friend.Id == 0) authUser.Friend = null”的操作。
-
一个新错误:类型 FriendModel 出现在单个 LINQ to Entities 查询中的两个结构不兼容的初始化中。
-
哦,该死的,我想我混淆了我使用过的几种不同的解决方法(目前没有我的项目或视觉工作室,所以无法仔细检查)。但我认为另一种选择是对每个属性进行“u.FriendId!= null”检查。像这样: ... Friend = new FriendModel() { Alias = u.FriendId != null ? j.别名:“”,...}。如果你到那时还没有这个问题的答案,我会在明天上班时仔细检查。
标签: c# asp.net-mvc entity-framework