c# - C# DbContext.Add 奇怪的行为
问题描述
我有以下这段代码:
class Email_DAO{
static Database database = null;
public static void uploadToDb(EmailTrovate e)
{
try
{
Console.WriteLine(e.email+"\n\n");
if (database == null) database = new Database();
database.Emails.Add(e);
database.SaveChanges();
Console.WriteLine("OK");
}
catch (Exception ex) { Console.WriteLine(ex.InnerException); }
}
public static void uploadListToDb(List<EmailTrovate> listEmail)
{
try
{
foreach(EmailTrovate email in listEmail)
{
uploadToDb(email);
}
}
catch (Exception) {}
}
}
以及执行前的数据库快照:(PK由ID和电子邮件组成)
+----+---------------+
| ID | email |
+----+---------------+
| 01 | test@test.com |
+--------------------+
现在,如果我写的话,从代码的另一部分(例如 Main)
EmailTrovate x1 = new EmailTrovate();
EmailTrovate x2 = new EmailTrovate();
x1.ID = 01;
x1.email = test@test.com;
x2.ID = 02;
x2.email = anothermail@provider.com;
List<EmailTrovate> list = List<EmailTrovate>();
list.Add(x1);
list.Add(x2);
Email_Dao.uploadListToDb(list);
预期行为:
test@test.com
System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_email_trovate'. Cannot insert duplicate key in object 'dbo.EmailTrovate'. The duplicate key value is (test@test.com, 1).
anothermail@provider.com;
OK
实际行为:
test@test.com
System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_email_trovate'. Cannot insert duplicate key in object 'dbo.EmailTrovate'. The duplicate key value is (test@test.com, 1).
anothermail@provider.com;
System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_email_trovate'. Cannot insert duplicate key in object 'dbo.EmailTrovate'. The duplicate key value is (test@test.com, 1).
基本上它不允许我插入第二个条目!并且当它们显然是两个不同的对象时,异常说“重复的键值是(test@test.com,1)”。在我什至打印了正确打印的邮件的方法中,为什么它会尝试再次添加第一个 ogject 呢?先感谢您。
解决方案
推荐阅读
- angular - 在打字稿中显示对象内的对象
- java - Java未能初始化类来表示geoJson结构
- php - 如何修复复选框的 jquery removeClass?(添加课堂作品)
- c# - 转发给控制器的 DateTime 控件的动态数量
- c++ - 如何在 repl.it 中操作 /tmp/audio 来播放音频?
- jenkins - 多次重启后,我的 jenkins、keycloak 和 nexus pod 将进入 CrashLoopBackOff
- python - 如何将复杂的 Python Dict 转换为 API 的 JSON 可序列化有效负载?
- python - 未找到参数 '('',)' 的 'create_chat' 的反向操作。尝试了 1 种模式:['create_chat/(?P
[0-9]+)/$'] - python - 同时在多个实例上执行相同的类方法
- node.js - 用于日志的 ExpressJS 中间件