データベースに単純に追加する Entity Framework メソッドがありProduct
ます。テストメソッドを実行すると、これはすべて期待どおりに機能します。
次に、AddProductAsync
メソッドがあります:
Task<Product> AddProductAsync(Product pToAdd)
{
return Task<Product>.Factory.StartNew(() => AddProduct(pToAdd));
}
このメソッドを使用してテストを実行すると、テストは実行されますが、実際には何も起こりません。メソッドのブレークポイントにAddProduct
ヒットすることはなく、データベースには何も追加されません。エラーも警告もありません。
私は何を間違っていますか?それとも、EF6 を待ちましょうか。
前もって感謝します
元の方法:
public static Product AddProduct(Product pToAdd)
{
using (var viralDatabase = new ViralWearContext())
{
if (viralDatabase.Products.Any(p => p.Name == pToAdd.Name || p.Description == pToAdd.Description))
{
var result = viralDatabase.Products.First(p => p.Name == pToAdd.Name || p.Description == pToAdd.Description);
//set 0 so client knows it already exists
result.ProductID = 0;
return result;
}
else
{
var result = viralDatabase.Products.Add(pToAdd);
viralDatabase.SaveChanges();
return result;
}
}
}
単体テストによって呼び出されるメソッド:
public async void AddProductsAsyncTest()
{
Stopwatch timer = new Stopwatch();
Product testProduct = GenerateTestProduct();
Product testProductTwo = GenerateTestProduct();
Product testProductThree = GenerateTestProduct();
timer.Start();
Product_Datalayer.AddProduct(testProduct);
Product_Datalayer.AddProduct(testProductTwo);
Product_Datalayer.AddProduct(testProductThree);
var time1 = timer.ElapsedMilliseconds;
Console.WriteLine(timer.ElapsedMilliseconds.ToString());
timer.Reset();
Product testProductAsync = GenerateTestProduct();
Product testProductTwoAsync = GenerateTestProduct();
Product testProductThreeAsync = GenerateTestProduct();
timer.Start();
var result1 = Product_Datalayer.AddProductAsync(testProductAsync);
var result2 = Product_Datalayer.AddProductAsync(testProductTwoAsync);
var result3 = Product_Datalayer.AddProductAsync(testProductThreeAsync);
await Task.WhenAll(result1, result2, result3);
var time2 = timer.ElapsedMilliseconds;
Console.WriteLine(timer.ElapsedMilliseconds.ToString());
}