benim modeline dayalı tabloları güncelleştirmek olmaz :EF sadece temel özelliklerini içeren bir Kişi modeli oluşturduk İlk başta
[Required]
public PersonData PersonData { get; set; }
Maalesef EF hiç Veritabanı güncelleme olmayacak - Persondata ilk başta artık hiçbir Kişi mülkiyet yoktur bu yüzden tipi Kişinin bir nesne güncellenmiş var içeriyordu. Öte yandan, EF PersonData_Id için yeni bir sütun oluşturmaz.
Ayrıca İD kolon otomatik artan (do diğer tablo kimliği Kolonu) değildir. .
KISITLAMA [FK_dbo.SGDB_Persons_dbo.SGDB_PersonData_Id] YABANCI KEY ([id]) REFERANSLAR [dbo] [SGDB_PersonData] ([id])
: Beni karıştıran benim Kişi tablo içinde oluşturulan alır aşağıdaki kısıtlamaya devam olduğunu
I (en azından ben öyle düşünüyorum) her şeyi denedim. Tüm tabloları/tüm veritabanını el ile bıraktım, EF'yi yeniden yükledim, manuel geçişleri gerçekleştirdim ancak hiçbir şey işe yaramıyor gibi görünüyor.
bu beni şu kodla benim veritabanını Tohum mümkün olmayabilir neden bu sorun olduğunu düşünüyorum:
protected override void Seed(PersonContext context) {
base.Seed(context);
var dep = new DepartmentContext().Departments.First();
var status = new Status("Test");
var persondata = new PersonData(status);
context.Status.Add(status);
context.PersonData.Add(persondata);
for (int i = 0; i < 10; i++) {
var person = new Person {
Firstname = $"TestPersonFirstname{i}",
Lastname = $"TestPersonLastname{i}",
SourceType = COM.SourceType.Manual,
Department = dep,
PersonData = persondata
};
context.Persons.Add(person);
}
context.SaveChanges();
}
Her şey bu kod olsun ı bir özel durum alıyorum infaz:
Meta veri koleksiyonunda 'SGDB.DAL.Contexts.Person_Department' kimliğine sahip üye yok. Parametre adı: kimlik.
Her iki sorunlar aynı sorunla ilgili ama hem çözülecek :) önceden
Teşekkür ihtiyaç olup olmadığını bilmiyorum!
Güncelleme 1
Benim Çözüm birkaç farklı Projeleri ayrılmıştır:
BLL, DAL COM UI
DataContexts DAL projesi içinde bulunur, COM proje içinde Modeller .
Bölümü Modeli:
[Table("SGDB_Departments")]
public class Department {
public int Id { get; set; }
[Required]
public string Costcenter { get; set; }
[Required]
public string Abbreviation { get; set; }
public string Description { get; set; }
public string FullDepartmentName {
get {
return [email protected]"{Division.Abbreviation}\{Abbreviation}";
}
}
[Required]
public virtual Division Division { get; set; }
}
Persondata Modeli:
[Table("SGDB_PersonData")]
public class PersonData {
public PersonData(Status status) {
Status = status;
}
public int Id { get; set; }
public DateTime Limit { get; set; }
public Person Responsible { get; set; }
[Required]
public Status Status { get; set; }
}
bir Department_Id sütunu var Kişi tablosu (Gördüğünüz gibi) (EF otomatik olarak eklenen).
Açıklama
Bir Kişi nesnesi bu kişi için ek bilgi olarak Persondata nesnesi içerir. Bir Kişinin Sorumlu Bir Kişisi olabilir/olmayabilir (bu nedenle PersonData.Responsible, Ana Kişiye bir Navigasyon Mülkiyeti değildir). Mümkünse Eklenti Tablosunun içine yabancı bir Anahtar istemiyorum. Ben anladım gibi
Ben bu deneyin ve benim sorun çözüldü eğer rapor edeceğiz
modelBuilder.Entity<Person>()
.HasRequired(e => e.PersonData)
.WithRequiredPrincipal(e => e.Responsible)
.WillCascadeOnDelete(true);
modelBuilder.Entity<Person>()
.HasRequired(e => e.PersonData)
.WithMany()
.WillCascadeOnDelete(true);
için değiştirmek zorunda kalacak.
Güncelleme 2
kimlik 'SGDB.DAL.Contexts.Person_Department' ile üye meta koleksiyonunda yok. Opsiyonel -
PersonData aynı projede mi? Bağlam neye benziyor? –
Lütfen "Departman" ve "PersonData" modellerini ekleyin. İlişki yapılandırması problemi gibi görünüyor. –
@SteveGreene - güncel bilgiler için soruma bakın. – C4p741nZ