gpt4 book ai didi

c# - 我应该如何防止在这里多次插入?

转载 作者:太空狗 更新时间:2023-10-30 01:21:20 25 4
gpt4 key购买 nike

我插入了大约 6 家银行的 5000 笔交易,但我在数据库中得到了 5000 行名称重复的银行。

public class Transaction
{
[Key]
public int Id { get; set; }
public DateTime TransDate { get; set; }
public decimal Value { get; set; }
public string Description { get; set; }
public Bank Bank { get; set; }
}

public class Bank
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}

public class FinancialRecordContext : DbContext
{
public FinancialRecordContext() : base("FinancialRecordDatabase") { }

public DbSet<Transaction> Transactions { get; set; }

public DbSet<Bank> Banks { get; set; }

public Bank FindOrInsertBank(string bankName)
{
var bank = Banks.SingleOrDefault(b => b.Name == bankName);
if (bank == null)
{
bank = new Bank { Name = bankName };
Banks.Add(bank);
}
return bank;
}
}

然后为了插入,我正在循环遍历一些数据并插入:

        using (var context = new FinancialRecordContext())
{
foreach (var t in data)
{
var tran = new Transaction
{
Description = t.Description,
Value = t.Value,
TransDate = t.TransDate,
Bank = context.FindOrInsertBank(t.BankName)
};
context.Transactions.Add(tran);
}
context.SaveChanges();
}

FindOrInsertBank 方法似乎一直在访问数据库,而不是在本地查看最近添加的但不是已提交的银行。我怎么能/应该这样做?

我是否应该在每次插入银行后SaveChanges?这不是我真正想要做的,我希望这一切都是一笔交易。

最佳答案

一些尝试的建议:

1) 检查Local收藏DbSet<Bank>首先。

public Bank FindOrInsertBank(string bankName)
{
var bank = Banks.Local.SingleOrDefault(b => b.Name == bankName);
if (bank == null)
{
var bank = Banks.SingleOrDefault(b => b.Name == bankName);
if (bank == null)
{
bank = new Bank { Name = bankName };
Banks.Add(bank);
}
}
return bank;
}

2) 强制调用 DetectChanges()每次更新后

context.Transactions.Add(tran);
context.ChangeTracker.DetectChanges();

关于c# - 我应该如何防止在这里多次插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15988352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com