Linq查询语句报错:“列名 'Discriminator' 无效”

3 篇文章 0 订阅
2 篇文章 0 订阅

当看到这个异常时,一脸茫然,我的Linq语句里并没有使用这个“Discriminator”字段。然后看了看生成的sql语句,我去,居然出现了“Discriminator”这个字段。
ON ([Extent4].[Discriminator] IN (N'YKSIPProductResponseVModel',N'YKSIPGoodsMapping')) 
百度了一下:
        异常的原因:我的EF使用了code first模式,YKSIPGoodsMapping表和数据库表YKSIPGoodsMapping对应,但是我后面又定义了一个类YKSIPProductResponseVModel,并且继承类YKSIPGoodsMapping,而类YKSIPProductResponseVModel并没有和数据库表存在映射关系,于是导致了EF无法识别子类,就出现了这个异常。

        解决方法:给和数据库没有映射关系的子类加上属性  [NotMapped] 就可以了。

  public class YKSIPProductResponseVModel : YKSIPGoodsMapping
    {
        
    }

Sql语句:
SELECT [Filter1].[ChannelLinkId1] AS [ChannelLinkId],  [Filter1].[OuterTitle] AS [OuterTitle],     
[Filter1].[ProductPackageId1] AS [ProductPackageId],  [Filter1].[PackageName] AS [PackageName],     
CASE WHEN ([Extent4].[GoodsMappingId] IS NULL) THEN -1 ELSE [Extent4].[PushData] END AS [C1],     
CASE WHEN ([Extent4].[GoodsMappingId] IS NULL) THEN -1 ELSE [Extent4].[GoodsStatus] END AS [C2],     
CASE WHEN ([Extent4].[GoodsMappingId] IS NULL) THEN N'' ELSE [Extent4].[PartnerGoodsId] END AS [C3],     
CASE WHEN ([Extent4].[GoodsMappingId] IS NULL) THEN N'' ELSE [Extent4].[ModifiedByName] END AS [C4],     
CASE WHEN ([Extent4].[GoodsMappingId] IS NULL) THEN CAST(NULL AS datetime2) ELSE [Extent4].[ModifiedDate] END AS [C5]    
FROM   (SELECT [Extent1].[ChannelLinkId] AS [ChannelLinkId2], [Extent2].[ChannelLinkId] 
AS [ChannelLinkId1], [Extent2].[ChannelId] AS [ChannelId], [Extent2].[OuterTitle] 
AS [OuterTitle], [Extent3].[ProductPackageId] AS [ProductPackageId1], [Extent3].[PackageName] AS [PackageName]        
FROM   [dbo].[ChannelPackageMapping] AS [Extent1]        
INNER JOIN [dbo].[ChannelLink] AS [Extent2] ON [Extent1].[ChannelLinkId] = [Extent2].[ChannelLinkId]       
 INNER JOIN [dbo].[ProductPackage] AS [Extent3] ON [Extent1].[ProductPackageId] = [Extent3].[ProductPackageId]     
    WHERE 0 = [Extent1].[IsDelete] ) AS [Filter1]    LEFT OUTER JOIN [dbo].[YKSIPGoodsMapping] AS [Extent4] 
	ON ([Extent4].[Discriminator] IN (N'YKSIPProductResponseVModel',N'YKSIPGoodsMapping')) 
	AND ([Filter1].[ChannelLinkId2] = [Extent4].[ChannelLinkId])
WHERE ([Filter1].[ChannelId] = @p__linq__0) AND (@p__linq__1 IS NULL OR [Filter1].[ProductPackageId1] = @p__linq__2) AND ((@p__linq__3 IS NULL) OR (( CAST(LEN(@p__linq__3) AS int)) = 0) 
OR ([Filter1].[PackageName] = @p__linq__4) 
OR (([Filter1].[PackageName] IS NULL) AND (@p__linq__4 IS NULL))) AND ((@p__linq__5 IS NULL) OR ([Extent4].[AccountsId] = @p__linq__6) 
OR (([Extent4].[AccountsId] IS NULL) AND (@p__linq__6 IS NULL))) AND ((@p__linq__7 IS NULL) OR (( CAST(LEN(@p__linq__7) AS int)) = 0) 
OR (@p__linq__8 = [Extent4].[PartnerGoodsId]) OR ((@p__linq__8 IS NULL) AND ([Extent4].[PartnerGoodsId] IS NULL))) AND ((@p__linq__9 IS NULL) 
OR (@p__linq__10 = [Extent4].[PushData]) OR ((@p__linq__10 IS NULL) AND ([Extent4].[PushData] IS NULL))) AND ((@p__linq__11 IS NULL) 
OR (@p__linq__12 = [Extent4].[GoodsStatus]) OR ((@p__linq__12 IS NULL) AND ([Extent4].[GoodsStatus] IS NULL)))
Linq语句:
 var query = from cpm in ChannelPackageMappingRepository.Entities
                        join cl in ChannelLinkRepository.Entities on cpm.ChannelLinkId equals cl.ChannelLinkId
                        join pp in ProductPackageRepository.Entities on cpm.ProductPackageId equals pp.ProductPackageId
                        join yksipgm in YkSipGoodsMappingRepository.Entities
                        on cpm.ChannelLinkId equals yksipgm.ChannelLinkId into cpmYksip //left join
                        from temp in cpmYksip.DefaultIfEmpty()
                        where cpm.IsDelete == false && cl.ChannelId == channelType
                        && (param.productId == null || pp.ProductPackageId == param.productId)
                        && (string.IsNullOrEmpty(param.productName) || pp.PackageName == param.productName)
                        && (param.accountId == null || temp.AccountsId == param.accountId)
                        && (string.IsNullOrEmpty(param.partnerGoodsId) || param.partnerGoodsId == temp.PartnerGoodsId)
                        && (param.pushData == null || param.pushData == temp.PushData)
                        && (param.GoodsStatus == null || param.GoodsStatus == temp.GoodsStatus)
                        select new
                        {
                            cl.ChannelLinkId,
                            cl.OuterTitle,
                            pp.ProductPackageId,
                            pp.PackageName,
                            PushData = temp == null ? -1 : temp.PushData,
                            GoodsStatus = temp == null ? -1 : temp.GoodsStatus,
                            PartnerGoodsId = temp == null ? "" : temp.PartnerGoodsId,
                            ModifiedByName = temp == null ? "" : temp.ModifiedByName,
                            ModifiedDate = temp == null ? null : temp.ModifiedDate
                        };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值