Basit bir varlık çerçeve kodu ilk uygulaması oluşturmaya çalışıyorum. Yeni bir kullanıcı oluşturmak ve bir istisna ile çakışanVarlık Çerçeve Kodu nasıl alınır İlk ve geçersizleştirilebilen yabancı anahtar özellikleri çalışmak için?
Ben EF sırasıyla 1-1 Kullanıcı ve ActivationTicket arasındaki eşleştirmeyi davranır varsayalım ama 1-0..1INSERT deyimi almak veritabanına (bir ActivationTicket olmadan kullanıcı) kaydetmek çalıştığınızda
public class User { public int UserId { get; set; } public string Username { get; set; } public virtual ActivationTicket ActivationTicket { get; set; } } public class ActivationTicket { public int ActivationTicketId { get; set; } public virtual User User { get; set; } public string Ticket { get; set; } }
: Ben bu sınıflara sahip FOREIGN KEY kısıtlaması "ActivationTicket_User". Çakışma, veritabanı "Test", "dbo.ActivatioTickets", "ActivationTicketId" sütununda gerçekleşti. Açıklama feshedildi.
Bu ne işe ben almak için ne gerekiyor olmalıdır?
modelBuilder .Entity<User>() .HasOptional<ActivationTicket>(u => u.ActivationTicket) .WithOptionalPrincipal();
Bu null olan bir KullanıcıNo içeren bir ActivationTickets tablosunu verecektir:
Sadece EF ile çalışmaya başladım, bu yüzden bu haritalama kuralının nereye yerleştirileceğinden emin değilim. Tüm bu eşlemelerin saklanacağı bir yer var mı? – b3n
İki seçeneğiniz var. 1) Doğrudan DbContext'ten türetilen bir sınıfın yöntemine koyun: korumalı geçersiz kılma geçersiz OnModelCreating (ModelBuilder modelBuilder) - VEYA - 2) ModelBuilder.Configurations.Add (new ...) – anon
'u kullanarak eşlemeleri tanımlayın. Eşlemleri ayrı sınıflarda tanımlamanızı öneririm (EntityTypeConfiguration öğesinden türetilen YourModelClass_MappingClass öğelerini tanımlayın ve bu sınıfın oluşturucusunda eşlemeyi tanımlayın, sonra @anon'ın kendi yorumunda yazdığı gibi DbContext OnModelCreating etkinliğinde başlatmanız gerekir. Ayrı sınıfları kullanmak çünkü tüm sınıflarınızın aynı yerde haritalandırılmasını tanımlamak gerçek bir karmaşa olurdu –
Prokurors