我正在开发一个C#控制台应用程序,它从Guild Wars 2 API下载数据并使用Entity Framework 6将其输入到我的数据库中.我正在尝试使用多线程,以便我可以加快输入大量的数据进入我的数据库.
问题是当代码DBContext.SaveChanges()在我的AddRecipes方法中运行到我的调用时,返回以下错误:
违反PRIMARY KEY约束'PK_dbo.Items'.无法在对象'dbo.Items'中插入重复键.重复键值为(0).
以下是与我的问题相关的代码部分:
class Program
{
private static ManualResetEvent resetEvent;
private static int nIncompleteThreads = 0;
//Call this function to add to the dbo.Items table
private static void AddItems(object response)
{
string strResponse = (string)response;
using (GWDBContext ctx = new GWDBContext())
{
IEnumerable<Items> itemResponse = JsonConvert.DeserializeObject<IEnumerable<Items>>(strResponse);
ctx.Items.AddRange(itemResponse);
ctx.SaveChanges();
}
if (Interlocked.Decrement(ref nIncompleteThreads) == 0)
{
resetEvent.Set();
}
}
//Call this function to add to the dbo.Recipes table
private static …Run Code Online (Sandbox Code Playgroud) c# multithreading entity-framework primary-key ef-code-first
此代码写在名为Monster.c的文件中.我在GameMain.c文件和Monster.c文件中定义了Monster.h.在Monster.h文件中,代码是:
#ifdef MONSTER_H_
#define MONSTER_H_
int Monster(int Selection);
EnemyStats MonsterStats(int Selection);
#endif
Run Code Online (Sandbox Code Playgroud)
然后我在Monster.c文件中创建了我的typedef结构,并创建了函数来返回结构的值.
typedef struct EnemyStats
{
int EnemyHP;
int VictoryExp;
int EnemyLevel;
}
EnemyStats;
EnemyStats MonsterStats(int Selection)
{
struct EnemyStats value;
switch(Selection)
{
case 1:
value.EnemyLevel = 1;
value.VictoryExp = 1;
value.EnemyHP = 1;
return value;
case 2:
value.EnemyLevel = 1;
value.VictoryExp = 1;
value.EnemyHP = 1;
return value;
...
}
Run Code Online (Sandbox Code Playgroud)
在GameMain.c文件中,我使用此代码尝试访问存储在结构中的信息:
EnemyStats result;
...
printf("%d", result.EnemyLevel);
Run Code Online (Sandbox Code Playgroud)
当我使用gcc GameMain.c Monster.c时,它给了我错误
GameMain.c:40:2:错误:未知类型名称'EnemyStats'
GameMain.c:61:25:错误:请求成员'EnemyHP'不是结构或联合
如果我尝试在EnemyStats结果之前添加struct; 它给了我这个错误.
GameMain.c:在函数'main'中:
GameMain.c:40:20:错误:'结果'的存储大小未知
我不确定我做错了什么.任何帮助表示赞赏.
对于任何不知道的人,我正在使用......说我正在跳过不会影响我描述的情况或代码冗余的代码
我在使用memcpy(). 我想数组的值复制v到oldv只有一次,然后更改的值v。我调用memcpy()了代码的第一部分,它做了它应该做的事情,但是在第二部分中,当我更改数组v然后再次打印vand oldv... 没有memcpy()第二次调用时,值也oldv发生了变化。为什么 ?编译器将 new 复制v到oldv而不调用memcpy().
#include<iostream>
#include<stdio.h>
#include <cstring>
using namespace std;
int main()
{
double **v,**oldv;
v = new double*[3];
for(unsigned int i=0; i<3; i++)
v[i] = new double[2];
oldv = new double*[3];
for(unsigned int i=0; i<3; i++)
oldv[i] = new double[2];
for(unsigned int i=0; i<3; i++)
{
for(unsigned int j=0; j<2; …Run Code Online (Sandbox Code Playgroud) 我是一个相对较新的C#,在理解这条消息时遇到了一些麻烦,以及它是如何导致问题的.在安装resharper之前没有显示错误,所以我认为它只是糖语法错误?
public void SetTransform(float x, float y, float angle)
{
SetTransform(x, y);
this.angle = angle;
}
Run Code Online (Sandbox Code Playgroud)
这个领域本身:
float angle;
Run Code Online (Sandbox Code Playgroud)
我很困惑,方法中的参数如何隐藏字段变量?...
因此,我正在尝试重新创建"每个"方法,作为Eloquent JavaScript练习的一部分.我无法弄清楚为什么版本2不起作用(版本1工作).
该书说"只有当谓词对数组的所有元素都返回true时,每个返回都是真的"
版本一
function every(array, test)
{
var boolean = true;
array.forEach(function(ele)
{
if (!test(ele))
boolean = false;
});
return boolean;
}
console.log(every([NaN, NaN, NaN], isNaN));
// ? true
console.log(every([NaN, NaN, 4], isNaN));
// ? false
Run Code Online (Sandbox Code Playgroud)
第二版
function every(array, test)
{
array.forEach(function(ele)
{
if (!test(ele))
return false;
});
return true;
}
console.log(every([NaN, NaN, NaN], isNaN));
// ? true
console.log(every([NaN, NaN, 4], isNaN));
// ? true
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用memcpy将一个字符串复制到另一个字符串中,代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct fullName
{
char* firstName;
char* lastName;
} NAME;
int main()
{
NAME myName, hisName;
myName.firstName = "aaaaaaa";
hisName.firstName = "bbbbbb";
memcpy(myName.firstName, hisName.firstName, sizeof(hisName.firstName));
printf("myName.firstName = %s\n", myName.firstName);
printf("hisName.firstName = %s\n", hisName.firstName);
}
Run Code Online (Sandbox Code Playgroud)
并且它给出了分段错误(核心转储)运行程序之后的错误我试图声明firstName并lastName作为指向char数组的指针而不是指向char的指针,但错误仍然存在.我错过了什么?!请帮忙......
仅供参考.我正在使用Ubuntu 14,我正在使用gcc(Ubuntu 4.8.2-19ubuntu1)......
如何将此LINQ查询转换为lambda?
var res = from c in db.Client
where db.TimesheetLine.Select(o => o.ClientId).Contains(c.Id)
select c;
Run Code Online (Sandbox Code Playgroud)
这个结果应该在下拉列表中,所以我开始这样:
ViewBag.ClientId = new SelectList(db.Client, "Id", "ClientName");
Run Code Online (Sandbox Code Playgroud)
任何帮助非常感谢.
我需要返回另外两个表达式的乘法表达式,但是这个例子给了我错误
public Func<double> EvaluateOne()
{
return () => EvaluateTwo() * EvaluateTwo();
}
public Func<double> EvaluateTwo()
{
return () => 2;
}
Run Code Online (Sandbox Code Playgroud)
在功能EvaluateOne
错误:can't applay operand * to operands of type Func<double> and Func<double>
考虑以下代码:
object str1 = "shahrooz";
object str2 = "shahrooz";
object int1 = 1;
object int2 = 1;
Console.WriteLine("str1 == str2 : " + (str1 == str2));
Console.WriteLine("int1 == int2 : " + (int1 == int2));
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
运行此代码时,您将获得以下结果:
str1 == str2 : True
int1 == int2 : False
Run Code Online (Sandbox Code Playgroud)
两个比较都是对象,但为什么第一个比较返回true但第二个比较返回false?