Linq Join lorsque vous utilisez EF7

c# entity-framework entity-framework-core linq

Question

J'ai l'instruction linq suivante:

( from apiKey in context.Set<ApiKey>()
                    join application in context.Set<Application>() on apiKey.User equals application.User
                    join paymentGateway in context.Set<PaymentGateway>() on apiKey.User equals paymentGateway.User
                    where apiKey.Key == secureRequest.ApiKey
                    where application.Secret == secureRequest.ApplicationSecret
                    where paymentGateway.Id == secureRequest.PaymentGatewayId
                    select apiKey ).AnyAsync();

Mais qui, autant que je sache, est correct, mais lorsque je lance le code, l'erreur suivante apparaît.

Expression of type 'System.Collections.Generic.IEnumerable`1[System.Data.Common.DbDataReader]' cannot be used for parameter of type 'System.Collections.Generic.IEnumerable`1[Microsoft.Data.Entity.Query.QuerySourceScope`1[DomainModel.PaymentGateway]]' of method 'System.Collections.Generic.IEnumerable`1[Microsoft.Data.Entity.Query.QuerySourceScope] _Join[QuerySourceScope,QuerySourceScope`1,User,QuerySourceScope](System.Collections.Generic.IEnumerable`1[Microsoft.Data.Entity.Query.QuerySourceScope], System.Collections.Generic.IEnumerable`1[Microsoft.Data.Entity.Query.QuerySourceScope`1[DomainModel.PaymentGateway]], System.Func`2[Microsoft.Data.Entity.Query.QuerySourceScope,PaymentGatewayWrapper.DomainModel.User], System.Func`2[Microsoft.Data.Entity.Query.QuerySourceScope`1[PaymentGatewayWrapper.DomainModel.PaymentGateway],PaymentGatewayWrapper.DomainModel.User], System.Func`3[Microsoft.Data.Entity.Query.QuerySourceScope,Microsoft.Data.Entity.Query.QuerySourceScope`1[DomainModel.PaymentGateway],Microsoft.Data.Entity.Query.QuerySourceScope])'

Tout pointeur dans la bonne direction serait un grand merci.

Après quelques recherches, j’ai constaté que c’est le cas qui a causé cette erreur. Donc, avec ce qui suit:

( from apiKey in context.Set<ApiKey>()
                        join application in context.Set<Application>() on apiKey.User equals application.User
                        join paymentGateway in context.Set<PaymentGateway>() on apiKey.User equals paymentGateway.User
                        where apiKey.Key == secureRequest.ApiKey
                        where application.Secret == secureRequest.ApplicationSecret
                        where paymentGateway.Id == secureRequest.PaymentGatewayId
                        select apiKey ).ToListAsync();

Je reçois cette erreur:

The multi-part identifier "application.Secret" could not be bound.
The multi-part identifier "paymentGateway.Id" could not be bound.

Si quelqu'un sait ce qu'est ce problème, mais je ne pense pas que EF 7 prend en charge la connexion correctement

Réponse populaire

Comme je le sais, la jointure devrait être sur les types primitifs. dans votre jointure, il semble que vous rejoignez l'objet User mais que vous deviez plutôt la rejoindre pour UserId .

( from apiKey in context.Set<ApiKey>()
                    join application in context.Set<Application>() on apiKey.UserId equals application.UserId
                    join paymentGateway in context.Set<PaymentGateway>() on apiKey.UserId equals paymentGateway.UserId
                    where apiKey.Key == secureRequest.ApiKey
                    where application.Secret == secureRequest.ApplicationSecret
                    where paymentGateway.Id == secureRequest.PaymentGatewayId
                    select apiKey ).AnyAsync();



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi