我们正在为我们的研究项目开发一个数据库,在向表中添加数据时我们遇到了意外错误。
stack = [] # stack[0] is the top of the stack
buffer = [w1, w2, ..., wn]
while len(buffer) > 0 or len(stack) != 1:
if stack[0] is the head of stack[1]:
apply left-arc
if stack[1] is the head of stack[0]:
if there is a token in the buffer whose head is stack[0]
# (i.e not all children of stack[1] have been attached to it)
apply shift
else:
apply right-arc
我们也尝试过:
使用ExecuteSqlCommand添加新记录,效果很好
using (var ctx = new BazyDanychContext())
{
Osoba tmpTask = new Osoba { Imie = ImieLbl.Text, Nazwisko = NazwiskoLbl.Text, Telefon = TelefonLbl.Text, Adres = AdresLbl.Text, Mail = MailLbl.Text, IloscTransakcji = Int32.Parse(IloscLbl.Text), Typ = TypList.Text };
ctx.Osoba.Add(tmpTask);
ctx.SaveChanges();
}
使用ctx.Database.ExecuteSqlCommand("INSERT INTO dbo.Osoba VALUES('0','jan','nowak', '222222', 'adres', 'mail', '2', 'osoba')");
(以及ctx.Entry(tmpTask).State = System.Data.Entity.EntityState.Added;
)
手动输入值(例如在ExecuteSqlCommand行中)
无论我们做什么,.Modified
都会给我们
ctx.SaveChanges()
我们的课程:
OptimisticConcurrencyException: Store update, insert, or delete statement affected an unexpected number of rows (0).
数据库表的结构如下:
namespace BazyDanych
{
public class BazyDanychContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
base.OnModelCreating(modelBuilder);
}
public BazyDanychContext() : base("ProjektBD")
{
Database.SetInitializer(new SQLdb());
}
public DbSet<Osoba> Osoba { get; set; }
}
}
namespace BazyDanych
{
public class Osoba
{
public int ID { get; set; }
public string Imie { get; set; }
public string Nazwisko { get; set; }
public string Telefon { get; set; }
public string Adres { get; set; }
public string Mail { get; set; }
public int IloscTransakcji { get; set; }
public string Typ { get; set; }
public override string ToString()
{
return "Imie: " + Imie + "\t Nazwisko: " + Nazwisko + "\t ID: " + ID.ToString();
}
}
}
答案 0 :(得分:0)
在您的C#Entity Framework代码中,您没有包含ID的值,这意味着您将其设置为自动递增为IDENTITY值。但是,在INSERT
语句中,您包含了一个值,如果将其设置为IDENTIY值,则该值不起作用。要解决您的问题,您可以执行以下两项操作之一:
将您的ID
列更改为自动增加。这样您就可以保留C#代码,并且它应该按预期工作而不提供值。如果您不想直接对插入的值负责,请执行此操作。
在ID
列的EF代码中包含一个值:
using (var ctx = new BazyDanychContext())
{
Osoba tmpTask = new Osoba { ID = IDLbl.Text, Imie = ImieLbl.Text, Nazwisko = NazwiskoLbl.Text, Telefon = TelefonLbl.Text, Adres = AdresLbl.Text, Mail = MailLbl.Text, IloscTransakcji = Int32.Parse(IloscLbl.Text), Typ = TypList.Text };
ctx.Osoba.Add(tmpTask);
ctx.SaveChanges();
}