Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Add方法将null空对象返回到数据库_C#_.net - Fatal编程技术网

C# Add方法将null空对象返回到数据库

C# Add方法将null空对象返回到数据库,c#,.net,C#,.net,我从一个API获取数据,将其反序列化以使用我的模型,但当我尝试将该数据添加到数据库时,它只存储一个空白对象。我尝试通过CrdResponse传递数据,但这提供了一个我无法绕过的异常 public async Task <ActionResult> InsertCard(Card card) { List<Card> CardsInfo = new List<Card>(); var getUr

我从一个API获取数据,将其反序列化以使用我的模型,但当我尝试将该数据添加到数据库时,它只存储一个空白对象。我尝试通过CrdResponse传递数据,但这提供了一个我无法绕过的异常

public async Task <ActionResult> InsertCard(Card card)
        {

            List<Card> CardsInfo = new List<Card>();

            var getUrl = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;

            var test = new Uri(getUrl);

            var id = test.Segments.Last();

            SingleResult += id;


            using (var client = new HttpClient())
            {
                //passing service baseurl 
                client.BaseAddress = new Uri(SingleResult);

                client.DefaultRequestHeaders.Clear();

                //Define request data format
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                //Sending request to find web api REST service resource Getallcards using HTTPClient
                HttpResponseMessage Res = await client.GetAsync(SingleResult);

                //Checking the response is successful or not which is sent using HttpClient  

                if (Res.IsSuccessStatusCode)
                {
                    //Storing the response details received from web api

                    var CrdResponse = Res.Content.ReadAsStringAsync().Result;


                    //Deserializing the response recieved from web api and storing in to the card list
                    CardsInfo = JsonConvert.DeserializeObject<List<Card>>(CrdResponse);

                    _context.Cards.Add(card);

                    _context.SaveChanges();
                }

            }

            return RedirectToAction("Index", "API");
        }

这就是我希望获得的所有信息

您忘记等待ReadAsStringAsync方法的结果,如下所示:

var CrdResponse = await Res.Content.ReadAsStringAsync();
因为它是一个异步方法,所以在调用result时它可能没有完成操作,这取决于您试图读取的字符串的大小


希望有帮助

您正在添加您在方法参数中传递的“卡”:

public async Task <ActionResult> InsertCard(Card card)
...
_context.Cards.Add(card);
公共异步任务插入卡(卡片)
...
_context.Cards.Add(卡片);
我认为您要做的是通过从字符串响应反序列化的卡:

CardsInfo = JsonConvert.DeserializeObject<List<Card>>(CrdResponse);

foreach(Card c in CardsInfo)
{
    _context.Cards.Add(c);
}
CardsInfo=JsonConvert.DeserializeObject(CrdResponse);
foreach(CardsInfo中的卡c)
{
_上下文。卡片。添加(c);
}

还有什么错误?那么,您是否在那里设置了断点以查看
为空的原因?我看不到您在任何地方使用Web服务的回复,这可能是原因吗?当我尝试使用Cards信息时,错误是参数1:无法从“System.Collections.Generic.List”转换为“YGOBuilder.Models.Card”YgoBuilders,就像您得到一个vlaue,并且尝试反序列化为列表一样,行
CardsInfo=JsonConvert.DeserializeObject(CrdResponse)是错误发生的地方,请尝试将其设置为
CardsInfo=JsonConvert.DeserializeObject(CrdResponse)当我调用同一个方法来显示所有结果时,它正确地拉入,因此我假设它是正确的,否则它将不适用于我使用的索引方法。这实际上非常接近,但是由于某种原因,卡ID不接受通过JSON提供的ID。而是在数据库中递增。问题-数据库中是否已经存在
-在这种情况下,您想更新它,而不是添加它,如果不想,那么您的数据库设计是错误的-当您不需要时,您有一个自动递增键。不,卡不存在,我正在调用api并根据api响应中的值在数据库中添加新对象。因此,需要更改数据库ID列以允许插入。这取决于您使用的数据库类型。@AndyStav您需要将数据库配置为不自动生成ID。看一看
[DatabaseGenerated(DatabaseGeneratedOption.None)]
类的
Id
属性上的属性可以做这项工作(或者使用文章中所示的fluent API)。这家伙的回答不应该有它的反对票
.Result
通常是一个很大的禁忌,尤其是在一个已经正确标记为
async
wait
s其他调用的方法中。这是一个需要做出的正确改变。
public async Task <ActionResult> InsertCard(Card card)
...
_context.Cards.Add(card);
CardsInfo = JsonConvert.DeserializeObject<List<Card>>(CrdResponse);

foreach(Card c in CardsInfo)
{
    _context.Cards.Add(c);
}