我正在制作一个使用 ADO.NET 的 ASP.NET 应用程序。
用户也可以创建记录并更改它们,但是当我更改记录时,它会按应有的方式更改,但它也会创建一个新的相同记录(使用不同的键)。
当用户想要更改记录时,他从列表中选择它(获取整个实体)并进入新页面,然后文本框会填充来自实体的信息:注意:KorisnickaSesija.izabraniProjekt 是记录(整个实体)我想改变
if (KorisnickaSesija.izabraniProjekt != null)
{
txtName.Text = KorisnickaSesija.izabraniProjekt.naziv;
txtOpis.Text = KorisnickaSesija.izabraniProjekt.opis;
txtPlaca.Text = KorisnickaSesija.izabraniProjekt.cijenaPoSatu.ToString();
txtGodina.Text = KorisnickaSesija.izabraniProjekt.deadline.Value.Year.ToString();
txtMjesec.Text = KorisnickaSesija.izabraniProjekt.deadline.Value.Month.ToString();
txtDan.Text = KorisnickaSesija.izabraniProjekt.deadline.Value.Day.ToString();
izabraneKategorije = KorisnickaSesija.izabraniProjekt.Kategorija.ToList();
foreach (var item in izabraneKategorije)
{
sveKategorije.Remove(item);
}
}
lbSveKategorije.DataSource = sveKategorije;
lbSveKategorije.DataTextField = "naziv";
lbSveKategorije.DataBind();
lbIzabraneKategorije.DataSource = izabraneKategorije;
lbIzabraneKategorije.DataTextField = "naziv";
lbIzabraneKategorije.DataBind();
在用户更改了他想要更改的内容后,我这样做:
protected void btnSave_Click(object sender, EventArgs e)
{
if (txtName.Text.Length > 0 && txtOpis.Text.Length > 0 && txtPlaca.Text.Length > 0 && txtDan.Text.Length > 0 && txtMjesec.Text.Length > 0 && txtGodina.Text.Length > 0 && izabraneKategorije.Count > 0)
{
Projekt projekt = new Projekt();
DateTime deadline = new DateTime(int.Parse(txtGodina.Text), int.Parse(txtMjesec.Text), int.Parse(txtDan.Text));
projekt.naziv = txtName.Text;
projekt.opis = txtOpis.Text;
projekt.cijenaPoSatu = int.Parse(txtPlaca.Text);
projekt.deadline = deadline;
projekt.datumObjavljivanja = DateTime.Now;
foreach (var item in izabraneKategorije)
{
projekt.Kategorija.Add(item);
}
projekt.Korisnik = KorisnickaSesija.logiraniKorisnik;
if (KorisnickaSesija.izabraniProjekt != null)
{
projekt.projektID = KorisnickaSesija.izabraniProjekt.projektID;
ProjektService.izmjeniProjekt(projekt); //change record
}
else
{
ProjektService.dodajProjekt(projekt); //create new record - dosnt go here by accident, i checked
}
Response.Redirect("HomeEmployer.aspx");
}
else
{
//ispisi da je greska
}
}
ProjektService.izmjeniProjekt(projekt); 这是:
public static void izmjeniProjekt(Projekt k)
{
Projekt kk = getProjektByID(k.projektID);
kk.naziv = k.naziv;
kk.opis = k.opis;
kk.cijenaPoSatu = k.cijenaPoSatu;
kk.deadline = k.deadline;
kk.Kategorija.Clear();
foreach (var item in k.Kategorija)
{
kk.Kategorija.Add(item);
}
Context.context.SaveChanges();
}
getProjektByID(k.projektID); 这是:
public static Projekt getProjektByID(int id)
{
var query = (from k in Context.context.Projekt
where id == k.projektID
select k).FirstOrDefault();
return query;
}
编辑
经过一番研究后,我认为问题可能在于“Projekt”通过中间表与实体“Kategorija”具有多对多关系。该表在模型中不可见,取而代之的是“Projekt”有 Projekt.Kategorija,而 Kategorija 有 Kategorija.Projekt。另外,我首先制作了我的数据库,然后在什么时候用它生成了我的模型。