我正在尝试向API添加新方法。
该方法的目标是返回在预置位中具有给定Partenaires
的{{1}}列表。
当我通过GET请求调用该方法时,我的API的应用程序池崩溃。在事件日志中,我有一个名为Microsoft-Windows-WAS的警告,并且链接的错误是:
为应用程序池“ UphairApi2”提供服务的进程与Windows Process Activation Service发生致命的通信错误。进程ID为“ 3960”。数据字段包含错误号。
网络开发人员工具说它无法加载响应数据。
无法加载响应数据
当我返回Prestation
时,这是返回的请求:
“ SELECT \ r \ n
return db.Partenaires.Where(p => p.PartenairePrestations.Any(pp => pp.Prestation.NomPrestation == prestation.Value)).ToString();
。Extent1
,\ r \ nIdPartenaire
。Extent1
,\ r \ nFirstName
。{{1 }},\ r \ nExtent1
。LastName
,\ r \ nExtent1
。Extent1
。Password
,\ r \ nExtent1
。PasswordSalt
,\ r \ nExtent1
。Type
,\ r \ nExtent1
。Pays
,\ r \ nExtent1
。Ville
,\ r \ nExtent1
。CodePostale
,\ r \ nExtent1
。Adresse
,\ r \ nExtent1
。Lat
,\ r \ nExtent1
。Lng
,\ r \ nExtent1
。ImageUrl
,\ r \ n { {1}}。Extent1
,\ r \ nCouvertureUrl
。Extent1
,\ r \ nDateNaissance
。Extent1
,\ r \ n {{1 }}。ADomicile
,\ r \ nExtent1
。SeDeplace
,\ r \ nExtent1
。DateAjout
,\ r \ nExtent1
。AdresseComplement
,\ r \ nExtent1
。TelMobile
,\ r \ nExtent1
。ValidationAutomatique
,\ r \ nExtent1
。{ {1}},\ r \ nNotifEmailMessage
。Extent1
,\ r \ nNotifEmailReservation
。Extent1
,\ r \ nNotifEmailPaiement
。{{1 }},\ r \ nExtent1
。NotifEmailNewsletter
,\ r \ nExtent1
。NotifSmsMessage
,\ r \ nExtent1
。NotifSmsReservation
,\ r \ nExtent1
。IdUserMango
,\ r \ nExtent1
。Iban
,\ r \ nExtent1
。TitulaireCompte
,\ r \ nExtent1
。IdWallet
,\ r \ nExtent1
。IdAccount
,\ r \ nExtent1
。Valide
\ r \ nFROMExtent1
ASSon
\ r \ n存在(SELECT \ r \ n1 ASExtent1
\ r \ nFROMPush
ASExtent1
内部联接{{1} }在IdPhone
上Partenaire
。Extent1
=C1
。PartenairePrestation
\ r \ n哪里(Extent2
。Prestation
= { {1}}。Extent3
)和(({Extent2
。IdPrestation
= @ p__linq__0)或(({Extent3
。IdPrestation
is NULL)AND(@ p__linq__0 IS NULL)))))“
以及Mysql Workbench的等效项:
选择Extent1.IdPartenaire,Extent1.FirstName,Extent1.LastName,Extent1.Email,Extent1.Password,Extent1.PasswordSalt,Extent1.Type,Extent1.Pays,Extent1.Ville,Extent1.CodePostale,Extent1.Adresse,Extent1。 Lat,Extent1.Lng,Extent1.ImageUrl,Extent1.CouvertureUrl,Extent1.DateNaissance,Extent1.ADomicile,Extent1.SeDeplace,Extent1.DateAjout,Extent1.AdresseComplement,Extent1.TelMobile,Extent1.ValidationAutomatifE。 Extent1.NotifEmailPaiement,Extent1.NotifEmailNewsletter,Extent1.NotifSmsMessage,Extent1.NotifSmsReservation,Extent1.IdUserMango,Extent1.Iban,Extent1.TitulaireCompte,Extent1.IdWallet,Extent1.IdAccount,Extent1.ValideP。来自Partenaire AS Extent1的IDPhone存在(从PartenairePrestation AS Extent2内联接中选择1 AS C1在Extent2.IdPrestation = Extent3.IdPrestation WHERE(Extent1.IdPartenaire = Extent2.IdPartenaire)和(((Extent3.NomPres tation ='Barbe')))
我在MysqlWorkbench中测试了此请求,并且很好地返回了一组数据。
这是我的方法:
Extent1
我在做什么错了?
任何帮助将不胜感激,因为我在互联网上找不到其他相关主题。
答案 0 :(得分:0)
您可能需要调试API并指定更多详细信息以帮助缩小原因。我可以看到几件事:
var prestation = queryString.FirstOrDefault();
// Handle when prestation comes back #null. Is that valid?
var results = db.Partenaires.Where(p => p.PartenairePrestations.Any(pp => pp.Prestation.NomPrestation == prestation.Value))
// .ToList() // Avoid .ToList() here... Select the entity properties you need.
.Select(p => new PartenaireMapItem {
IdPartenaire = p.IdPartenaire,
FirstName = p.FirstName,
LastName = p.LastName,
// NomComplet = p.LastName.Substring(0,1).ToUpper() + ". " + p.FirstName, // Remove. Make this a computed property in your view model.
Type = p.Type,
// DureeMin = 50, // Can remove, can be a computed property.
Lat = p.Lat,
Lng = p.Lng,
ImageUrl = p.ImageUrl,
SeDeplace = p.SeDeplace, // Ok if a String/value.
ADomicile = p.ADomicile, // Ok if a String/value.
Notes = p.NoteClientPartenaires, // Ok if a String/value.
Prestations = p.PartenairePrestations.Select(y => y.Prestation.NomPrestation).ToList(); // Assuming this is retrieving the names of presentations. List<string>.
}).ToList();
return results;
早期的.ToList()是必需的,因为您试图在Linq表达式中计算值(NameComplet),这些值通常会被馈送到数据库提供者无法理解的EF。为了提高效率,请仅选择映射的属性,然后将所有计算值更改为视图模型上的只读属性。 (PartenaireMapItem)
private string _nomComplet = null;
public string NomComplet
{
get { return _nomComplet ?? (_nomComplet = LastName.Substring(0,1).ToUpper() + ". " + FirstName); }
}
该示例在假定名称详细信息为只读的情况下缓冲了结果。如果可以更新名字/姓氏,则每次只需返回计算出的名字即可。
假定SeDeclace / ADomicile是字符串值而不是子实体,则其他属性应该很好。 Prestations列表也是如此。可以使用Prestation名称的字符串列表。
我做的另一个较小更改是在返回变量之前检索视图模型以进行检查。这样可以更好地方便使用断点在返回之前检查结果。从这里确定结果计算是否返回了任何错误,或者诸如将结果视图模型序列化回客户端之类的其他信息。