Si l'utilisateur saisit une valeur en double, je souhaite supprimer cette valeur en double et installer la nouvelle. Je ne veux pas utiliser la requête de mise à jour à cause de certaines exigences.
API Web
public CoCApiResponse CreateVersion(CreateVersion versionObj)
{
var taskForDelete = Task.Run(() =>
versionRepository.DeleteVersions(objVersionCollection));
taskForDelete.Wait();
versionRepository.CreateVersion(versionObj.version, lstVersion).Result;
}
Dépôt:
public async Task<Version> DeleteVersions(CoCBaseCollection<Version> Versions)
{
List<Version> versionList = new List<Version>();
foreach (var objVersion in Versions)
{
Version version = new Version()
{
Id = objVersion.Id,
VersionName = objVersion.VersionName,
StructureWeek = objVersion.StructureWeek,
IsWLTP = objVersion.IsWLTP,
VersionStatusTypeId = objVersion.VersionStatusTypeId,
CreatedDateTime = System.DateTime.Now,
LastUpdatedDateTime = System.DateTime.Now
};
versionList.Add(version);
}
int retval = 0;
DataTable dtVersions = TableConversion.EnitiesToDataTable<Version>(versionList);
pars = new DynamicParameters();
pars.Add("@VersionTableForDelete", dtVersions.AsTableValuedParameter("dbo.VersionTable"));
pars.Add("@Retval", retval, DbType.Int32, ParameterDirection.Output);
string DeleteVersionSP = "dbo.DeleteVersions";
return await ExecSproc<Version>(DeleteVersionSP, pars, new Version()).ConfigureAwait(false);
}
public async Task<Version> CreateVersion(Version version, List<Version> versions)
{
int retval = 0;
DataTable dtVersions = TableConversion.EnitiesToDataTable<Version>(versions);
pars.Add("@refVersionTable", dtVersions.AsTableValuedParameter("dbo.VersionTable"));
pars.Add("@Retval", retval, DbType.Int32, ParameterDirection.Output);
string CreateVersionSP = "dbo.SPCreateVersion";
return await ExecSproc<Version>(CreateVersionSP, pars, version).ConfigureAwait(false);
}
Je reçois cette erreur ci-dessous, alors que j'utilise la méthode Delete and Create
La procédure "SPCreateVersion" n'a pas de paramètre nommé "@VersionTableForDelete".
J'ai vérifié avec ma procédure de magasin et cela fonctionne bien et a également recherché plus de 2 heures de google mais je ne peux pas le résoudre. Parce que personne n'a donné la solution exacte pour dapper.net
Ouais! Cela fonctionne en faisant supprimer et insérer séparément
public CoCApiResponse CreateVersion(CreateVersion versionObj)
{
versionRepository.CreateVersion(versionObj.version).Result;// working
}
//
public CoCApiResponse CreateVersion(CreateVersion versionObj)
{
var taskForDelete = Task.Run(() =>
versionRepository.DeleteVersions(versionObj));//working
taskForDelete.Wait();
}
Mais c'est en jetant l'erreur lors de l'insertion, si nous faisons à la fois supprimer et insérer.
public CoCApiResponse CreateVersion(CreateVersion versionObj)
{
var taskForDelete = Task.Run(() =>
versionRepository.DeleteVersions(versionObj));//working
taskForDelete.Wait();
versionRepository.CreateVersion(versionObj.version).Result;// Not Working and throwing an error
}
Cette erreur peut être liée à un problème de rappel asyn / sync. Mais je n'ai aucune idée pour résoudre ce problème.
Comment pouvons-nous résoudre ce problème?
Ce problème a été résolu pendant que CreateVersion
les paramètres avant d'ajouter de nouveaux paramètres dans la procédure CreateVersion
Store.
comme
pars = new DynamicParameters();
Le code complet est
public async Task<Version> CreateVersion(Version version, List<Version> versions)
{
int retval = 0;
DataTable dtVersions = TableConversion.EnitiesToDataTable<Version>(versions);
pars = new DynamicParameters();// this line resolved the issue
pars.Add("@refVersionTable", dtVersions.AsTableValuedParameter("dbo.VersionTable"));
pars.Add("@Retval", retval, DbType.Int32, ParameterDirection.Output);
string CreateVersionSP = "dbo.SPCreateVersion";
return await ExecSproc<Version>(CreateVersionSP, pars, version).ConfigureAwait(false);
}