olmalıdır, otomatik olarak artmıyor, bir kimlik tutan ortak bir temel sınıftan türetmem gereken birkaç sınıfa sahibim.EF6 CodeFirst My [Key] Id Sütun, bir kimlik sütunu
public class MyBase {
[Key]
public int Id { get; set; }
}
public class MyName : MyBase {
public string Name { get; set; }
}
Bağlam (DataContext) şöyle görünür: I-Migrations etkinleştirme zaman
public DbSet<MyName>MyNames { get; set; }
// to avoid having EF make a MyBases table and instead map
// MyBase.Id into MyNames and my other derived classes I do this ...
protected override void OnModelCreating((DbModelBuilder modelBuilder) {
modelBuilder.Entity<MyBase>()
.Property(c => c.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<MyName>()
.Map(m => {
m.MapInheritedProperties();
m.ToTable("MyNames");
});
}
çıkan DB, ekleme, şu an için bunların biri hariç hepsi yok sayılması, o zaman kalan diyelim -Migration İlk ve Güncelleme-Veritabanı hiçbir tablo denilen MyBases olsun, ama bunun yerine MyNames
yılında Kimliği sütunu elde ediyoruzdbo.MyNames
-----------
Id (PK, int, not null)
Name (nvarchar(max), null)
Şimdiye kadar iyi, bütün bunlar derler ve kurar, sonra test kullanma Aşağıdaki gibi bir şey:
using (DataContext dc = new DataContext()) {
var jj = new MyName { Name = "Janice Joplin" };
dc.MyNames.Add(jj);
dc.SaveChanges();
var jh = new MyName { Name = "Jimmy Hendrix" };
dc.MyNames.Add(jh);
dc.SaveChanges();
}
Bu ilk kez çalışır (Janice Id = 0 ile eklenir) ancak değil ikinci ... Jimmy YİNELENEN KEY istisna alır. Not (tam açıklama için) aslında kodumun başka bir parçasındaki jj ve jh nesnelerini oluşturuyorum, sonra bunları MyBase nesnesi olarak bu yönteme (yukarıda) aktarıyorum, sonra da onları oldukları gibi MyName nesnelerine geri gönderiyorum. Umarım bu bir problem değildir.
Sanırım her şey bir tablodaysa Kimlik Kimlik olarak işaretlenebilir ve nesne kimliği değerini atamak için @@ IDENTITY kullanılabilir. Belki de sonuçta bir MyBases tablosu oluşturmam gerekecek ve önce bu kaydı oluşturacak, daha sonra Id işlemini bir işlemdeki türetilmiş tablolara kopyalayacağım. Bunun için en iyi yaklaşım nedir?
Bu EF6 CodeFirst acemi için herhangi bir yardım mutluluk duyacaktır. TEŞEKKÜRLER.
Oluşturulan şema/DDL'yi kaydeder misiniz? –