Web API'sı ve varlık Çerçevesi kullanılarak küçük bir projede çalışıyorum çünkü kaydedilemedi veya değişikliklerin kaydedilmesi başarısız oldu. Ve varlığımı yayınlarken bir sorunla karşı karşıyayım.Bağlantılı senaryodaki Varlık Çerçevesi, birden çok varlık türü
Benim varlıklar şuna benzer:
public class DayExercises
{
public DayExercises()
{
Exercises = new List<Exercise>();
}
[Key]
public int Id { get; set; }
public string Day { get; set; }
public virtual ICollection<Exercise> Exercises { get; set; }
}
ve benim Exercise
varlık buna benziyor.
public class Exercise
{
public Exercise()
{
DayExercises = new List<DayExercises>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual List<DayExercises> DayExercises { get; set; }
}
ve bu
[ResponseType(typeof(WorkoutTemplate))]
public IHttpActionResult PostWorkoutTemplate(DayExercises dayExercises)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
foreach (var dayExercise in dayExercises)
{
fitnessDbContext.Entry(dayExercise).State = EntityState.Added;
foreach (var exercise in dayExercise.Exercises.ToList())
{
fitnessDbContext.Entry(exercise).State = EntityState.Unchanged;
}
}
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = dayExercises.Id }, dayExercises);
}
ilişki gibi dayExercises
göz yazabilmek için benim web API yöntemi Birçok-çok olduğunu.
Sorun: benim yöntemine (veritabanında zaten var olan) Exercise
mevcut olan bir dayExercise
gönderiyorum. ama ben iki egzersizle dayExercise
gönderdiğimde. Bu özel durumu:
Ek bilgi: Değişikliklerin kaydedilmesi veya kabul edilmesi başarısız oldu, çünkü "FitnessFirst.WebApi.Exercise" türünde birden fazla öğe aynı birincil anahtar değerine sahip. Açık bir şekilde ayarlanmış birincil anahtar değerlerinin benzersiz olduğundan emin olun. Veritabanı tarafından oluşturulan birincil anahtarların veritabanında ve Entity Framework modelinde doğru şekilde yapılandırıldığından emin olun. Veri Tabanı Önce/Model İlk yapılandırması için Varlık Tasarımcısı'nı kullanın. Ben de Deattach
için varlıkları çalıştı
. Kod İlk yapılandırma için 'HasDatabaseGeneratedOption" akıcı API veya 'DatabaseGeneratedAttribute' kullanın ve onların ID
ve Attach
bunları tekrar kullanarak veritabanından egzersiz yapın ve dayExercise
eklemek ama veritabanına kaydetmez
NOT:.. iki farklı egzersizleri eklediğinizde, o İstisna atmaz
şunlarla yanıtları okuyun ama bunu çözmez: Ensure that explicitly set primary key values are unique
Herhangi bir öneri veya açıklama.
HAHA, ya bu çok eski bir yazı, bu çözüme 1 yıl önce ulaştım. +1 çünkü haklısın. –