Pluralsight "Getting Started with Entity Framework 5" course by Julie Lerman'un "Kod İlk Modelleme" bölümünü izledikten sonra, bir ile sıfır arası iki POCO sınıfı oluşturdum veya -one ilişkisi: bir ebeveyn (Kullanıcı) ve bir isteğe bağlı alt öğesi (UserDetail). Userıd özelliği şemadaEntity Framework (EF) Kod İlk Basamakla Tek Sıfırla veya Bir ilişkiyi silme
User and UserDetail data model diagram (click to view).
Bildirim birincil anahtar ve UserDetail için yabancı bir anahtardır.
İlgili kod: UserDetail yabancı anahtar kaskad etkin silme olmadığından
UserRepository sınıfında Sil() yöntemi çağrıldığındapublic class User
{
//...
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
/* Has a 1:0..1 relationship with UserDetail */
public virtual UserDetail UserDetail { get; set; }
//...
}
public class UserDetail
{
//...
/* Has a 0..1:1 relationship with User */
public virtual User User { get; set; }
[Key, ForeignKey("User")]
public int UserId { get; set; }
//...
}
public class EFDbContext : DbContext
{
public DbSet<User> Users { get; set; }
//public DbSet<UserDetail> UserDetails { get; set; } /* Explicit declaration not necessary. Context is aware of UserDetail entity due to 0..1:1 relationship with User */
public EFDbContext()
{
Configuration.ProxyCreationEnabled = true;
Configuration.LazyLoadingEnabled = true;
}
}
public class UserRepository : IUserRepository
{
private EFDbContext _context = new EFDbContext();
public void Delete(User entity)
{
entity = _context.Users.Find(entity.UserId);
//...
_context.Users.Remove(entity);
_context.SaveChanges();
//...
}
}
, bu veritabanındaki kullanıcı kaydını silmez.
REFERANS kısıtlaması "FK_dbo.UserDetail_dbo.User_UserId" ile çakışan DELETE deyimi.
nasıl basamaklı Varlık Çerçeve Kod Önce kullanılarak bire sıfır to-ya-ilişkileri için siler sağlayacak (a Kullanıcıyı silme otomatik UserDetail silecek şekilde)?
WillCascadeOnDelete() yaptığını nedir (EntityFramework 6'da) mevcuttur iki aşırı herhangi eşleşmiyor: Ben ilk
kullanıldığında göç kodu oldu Her ne kadar bağımlı tablo (UserDetail), bu ilişkide (kullanıcı) bağımlı tabloya uygulamak zorunda kaldım.Ayrıca, UserDetail sınıfında UserId özelliği üzerinde Key ve ForeignKey veri yeniden kayıtlarını kaldırdım. Çok teşekkür ederim! – arsenalogy
FWIW, bu makalede, WillCascadeOnDelete() 'nin bağımlı tabloya http://msdn.microsoft.com/en-us/data/jj591620.aspx#RequiredToOptional olarak uygulanması fikri bana yardımcı oldu. – arsenalogy
Tam olarak ihtiyacım olan şey. Bazıları basamaklı silme için [Zorunlu] önerdi. Bu gerçekten işe yarıyor, ama tabi ki, sadece gerçekten gerekli ise. – CodeMonkey