İlk EF temel kod, bu null yaptıktan sonra gevşek yabancı anahtar contraint

oy
0

Bunu vardı:

public class Customer
{
    public int Id {get; set;}
    //some more properties
}

public class Payment
{
    public int Id {get; set;}
    public int CustomerId {get; set;} //foreign key
    public Customer Customer {get; set;}
}

Hangi veritabanında bir yabancı anahtar kısıtlaması yol açar. Sonra CustomerId Nullable yaptı:

public class Payment
{
    public int Id {get; set;}
    public int? CustomerId {get; set;} //foreign key
    public Customer Customer {get; set;}
}

Ben göç komut dosyası oluşturmak için, böyle bir şey olsun:

IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'MyMigration')
BEGIN

DECLARE @var2 sysname;

    SELECT @var2 = [d].[name]
      FROM [sys].[default_constraints] [d]
INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] 
       AND [d].[parent_object_id] = [c].[object_id]
     WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Payments]') AND [c].[name] = N'CustomerId');

IF @var2 IS NOT NULL EXEC(N'ALTER TABLE [Payments] 
    DROP CONSTRAINT [' + @var2 + '];');

ALTER TABLE [Payments] ALTER COLUMN [CustomerId] int NULL;
END;

GO

Yani şimdi sütun Payments.CustomerId null, ancak yabancı anahtar kısıtlaması kaldırılır. Nasıl geri yabancı anahtar kısıtlamasını alabilirim?

düzenleme: Bir şey daha. Benim kod değişiklikleri arasında, ben de protected override void OnModelCreating (ModelBuilder ModelBuilder) bu ekledi:

new PaymentMap(modelBuilder.Entity<Payment>());
Oluştur 08/11/2018 saat 11:29
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
0

Benim yerel veritabanı ve "update-veritabanı" ile Yeniden yaratılan düştü. Bu benim sorun çözüldü. Onların zaman ve çaba gösteren herkese çok teşekkürler!

Cevap 12/11/2018 saat 14:58
kaynak kullanıcı

oy
0

EF Çekirdek gibi elle, tablolar arasındaki bağlantıları yapmak demektir Eğer DataContext sınıfta bunları yazmaya çalıştık?

Ekle List<Payment> Paymentssizin de Customersınıf ve içinde DataContext sınıfında OnModelCreategeçersiz kılma yöntemi eklenti:

builder
     .Entity<Payment>()
     .HasOne(p => p.Customer)
     .WithMany(c => c.Payments)
     .HasForeignKey(p => p.CustomerId);
Cevap 08/11/2018 saat 15:06
kaynak kullanıcı

oy
0

Amacıyla bunu eklemek gerekir çalışması için public virtual ICollection<Tenant> Payments { get; set;}için Customersınıfta

blockquote

public class Customer
{
    public int Id { get; set; }
    public virtual ICollection<Payment> Payments { get; set; }
}

public class Payment
{
    public int PaymentId{ get; set; }
    public int? CustomerId { get; set; }
    public Customer Customer { get; set; }
}
Cevap 08/11/2018 saat 12:11
kaynak kullanıcı

oy
0

Sen bunu açıklamak gerekir System.ComponentModel.DataAnnotations.Schema.ForeignKeyAttributeaçıkça:

public class Payment
{
    public int Id {get; set;}

    public int? CustomerId {get; set;} //foreign key

    [ForeignKey("CustomerId")]
    public Customer Customer {get; set;}
}
Cevap 08/11/2018 saat 11:33
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more