我遇到了以下问题。如果我每次创建新记录时都使用dbcontext将记录插入到数据库表中。 因此,例如,如果表中已经存在Stadt和Postleitzahl,则我的应用程序应采用记录实例的ID属性,以创建具有相同Postleitzahl和Stadt值的新的自动生成的ID。 我要去哪里错了? 我在Controller中的创建方法如下:
public ActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(CreateKundeViewModel viewModel)
{
if (ModelState.IsValid)
{
var kunde = new Kunde()
{
Vorname = viewModel.Vorname,
Nachname = viewModel.Nachname,
Strasse = viewModel.Strasse,
Hausnummer = viewModel.Hausnummer,
Email = viewModel.Email,
Telefon = viewModel.Telefon,
AGB = viewModel.AGB,
Whatsapp = viewModel.Whatsapp,
Web = viewModel.Web,
Aktiv = viewModel.Aktiv
};
var anrede = new Anrede()
{
AnredeText = viewModel.Anrede,
AnredeTyp = 1
};
var stadt = new Stadt()
{
Ort = viewModel.Ort,
Postleitzahl = viewModel.Postleitzahl
};
var hund = new Hund()
{
Name = viewModel.HundName,
Groesse = viewModel.Groesse,
Gewicht = viewModel.Gewicht,
Geburtsdatum = viewModel.Geburtsdatum
};
var rasse = new Rasse()
{
Rassename = viewModel.Rassename
};
var kastriert = new Kastriert()
{
Kastrierttyp = viewModel.Kastriertname
};
var geschlecht = new Geschlecht()
{
Geschlechtstyp = viewModel.Geschlecht
};
_context.Anredes.Add(anrede);
_context.Stadts.Add(stadt);
_context.Kundes.Add(kunde);
_context.Rasses.Add(rasse);
_context.Kastrierts.Add(kastriert);
_context.Geschlechts.Add(geschlecht);
_context.Hunds.Add(hund);
_context.SaveChanges();
}
return RedirectToAction("Index", "Kunde");
}
答案 0 :(得分:0)
您可以检查记录是否已存在,然后添加它,如下所示:
if(_context.Kundes.Count(e => e.Vorname== kunde.Vorname)==0)
{
_context.Kundes.Add(kunde);
}
答案 1 :(得分:-1)
如果您使用的是EntityFramework 4.3,则可以使用AddOrUpdate
名称空间下的System.Data.Entity.Migrations
方法。
public static void AddOrUpdate<TEntity>(
this IDbSet<TEntity> set,
params TEntity[] entities
)
where TEntity : class
请使用link作为参考
如果您使用的是旧版的Entity Framework,则此链接可能会有所帮助
Update Row if it Exists Else Insert Logic with Entity Framework