我正在尝试向我的api添加一个新方法。
该方法的目标是返回 Partenaires
具有给定的 Prestation
在他们的施舍中。
当我通过get请求调用该方法时,api的应用程序池崩溃。在事件日志中,我有一个名为microsoft windows was的警告,链接的错误是:
为应用程序池“uphairapi2”提供服务的进程遇到与windows进程激活服务的致命通信错误。进程id为“3960”。数据字段包含错误号。
networkdeveloper工具说它无法加载响应数据。
未能加载响应数据
当我回来的时候 return db.Partenaires.Where(p => p.PartenairePrestations.Any(pp => pp.Prestation.NomPrestation == prestation.Value)).ToString();
,返回的请求如下:
“”选择\r\n“ Extent1
. IdPartenaire
,\r\n Extent1
. FirstName
,\r\n Extent1
. LastName
,\r\n Extent1
. Email
,\r\n Extent1
. Password
,\r\n Extent1
. PasswordSalt
,\r\n Extent1
. Type
,\r\n Extent1
. Pays
,\r\n Extent1
. Ville
,\r\n Extent1
. CodePostale
,\r\n Extent1
. Adresse
,\r\n Extent1
. Lat
,\r\n Extent1
. Lng
,\r\n Extent1
. ImageUrl
,\r\n Extent1
. CouvertureUrl
,\r\n Extent1
. DateNaissance
,\r\n Extent1
. ADomicile
,\r\n Extent1
. SeDeplace
,\r\n Extent1
. DateAjout
,\r\n Extent1
. AdresseComplement
,\r\n Extent1
. TelMobile
,\r\n Extent1
. ValidationAutomatique
,\r\n Extent1
. NotifEmailMessage
,\r\n Extent1
. NotifEmailReservation
,\r\n Extent1
. NotifEmailPaiement
,\r\n Extent1
. NotifEmailNewsletter
,\r\n Extent1
. NotifSmsMessage
,\r\n Extent1
. NotifSmsReservation
,\r\n Extent1
. IdUserMango
,\r\n Extent1
. Iban
,\r\n Extent1
. TitulaireCompte
,\r\n Extent1
. IdWallet
,\r\n Extent1
. IdAccount
,\r\n Extent1
. Valide
,\r\n Extent1
. Son
,\r\n Extent1
. Push
,\r\n Extent1
. IdPhone
\r\n从 Partenaire
作为 Extent1
\r\n存在的位置(选择\r\n1作为 C1
\r\n从 PartenairePrestation
作为 Extent2
内部连接 Prestation
作为 Extent3
在 Extent2
. IdPrestation
= Extent3
. IdPrestation
\r\n哪里( Extent1
. IdPartenaire
= Extent2
. IdPartenaire
)以及(( Extent3
. NomPrestation
=@p\u linq\u 0)或(( Extent3
. NomPrestation
是null)和(@p\u linq\u 0是null))”
mysql workbench的等价物是:
选择extent1.idpartneire、extent1.firstname、extent1.lastname、extent1.email、extent1.password、extent1.passwordsalt、extent1.type、extent1.pays、extent1.ville、extent1.codepastale、extent1.adresse、extent1.lat、extent1.lng、extent1.imageurl、extent1.couvertureurl、extent1.datenaissance、extent1.adomicile、extent1.sedeplace、extent1.dateajout,extent1.adressecomplete、extent1.telmobile、extent1.validationautomatique、extent1.notifemailmessage、extent1.notifemailreservation、extent1.notifemailpaiement、extent1.notifemailnewsletter、extent1.notifsmmessage、extent1.notifsmsrervation、extent1.idusermango、extent1.iban、extent1.titulairempte、extent1.idwallet、extent1.idaccount,extent1.valide、extent1.son、extent1.push、extent1.idphone from partenaire as extent1 where exists(从partenairereprestation as extent2中选择1 as c1 inner join prestation as extent3 on extent2.idprestation=extent3.idprestation where(extent1.idpartenaire=extent2.idpartenaire)和((extent3.nomprestation='barbe'))
我在mysqlworkbench中测试了这个请求,返回了一组数据。
我的方法是:
// GET: api/Partenaires_prestations
[Authorize]
[Route("api/Partenaires_prestations")]
public List<PartenaireMapItem> GetPartenairesWithPrestations() {
Random rnd = new Random();
var queryString = Request.GetQueryNameValuePairs();
var prestation = queryString.FirstOrDefault();
return db.Partenaires.Where(p => p.PartenairePrestations.Any(pp => pp.Prestation.NomPrestation == prestation.Value))
.ToList()
.Select(p => new PartenaireMapItem {
IdPartenaire = p.IdPartenaire,
FirstName = p.FirstName,
LastName = p.LastName,
NomComplet = p.LastName.Substring(0,1).ToUpper() + ". " + p.FirstName,
Type = p.Type,
DureeMin = 50,
Lat = p.Lat,
Lng = p.Lng,
ImageUrl = p.ImageUrl,
SeDeplace = p.SeDeplace,
ADomicile = p.ADomicile,
Notes = p.NoteClientPartenaires,
Prestations = p.PartenairePrestations.Select(y => y.Prestation.NomPrestation).ToList();
}).ToList();
}
我做错什么了?
任何帮助将不胜感激,因为我找不到另一个相关的线程在互联网上。
1条答案
按热度按时间rkttyhzu1#
您可能需要调试api并指定更多细节来帮助缩小原因。我可以看到以下几点:
之所以需要early.tolist(),是因为您正在尝试计算linq表达式中的值(nameComplett),通常这些值会被提供给ef,而您的db提供程序无法理解这些值。为了提高效率,只选择“Map属性”,而将视图模型上的所有计算值更改为只读属性(partenairemapitem公司)
该示例缓冲结果,假设名称详细信息是只读的。如果名字/姓氏可以更新,每次只需返回计算出的名字。
假设sedelace/adomicile是字符串值而不是子实体,则其他属性应该很好。同样的情况也发生在施舍清单上。一个字符串列表的presstation名称应该是罚款。
我做的另一个小改动是在返回之前检索要检查的变量中的视图模型。这更便于在返回之前使用断点检查结果。从这里确定是否有任何错误是从结果的计算中返回的,或者其他一些事情,比如将结果视图模型序列化回客户机。