0

Я уже много читал, но не смог найти решение моей проблемы.EF Обязательно для необязательных отношений, не используя правильные столбцы для FK

Я пытаюсь что-то вроде этого я нарисовал очень быстро

enter image description here

Первого Try:

public class CarMap : EntityTypeConfiguration<Car> 
    { 
     public CarMap() 
     { 
      ToTable("Cars", Constants.Schema); 
      Property(t => t.EngineId); 

      HasRequired(x => x.SPropertyPolicyInsurance).WithMany().HasForeignKey(x => x.SPropertyPolicyInsuranceId); 
     } 
    } 



public class Car : MyBase 
    { 
     public int EngineId { get; set; } 
     public virtual Engine Engine { get; set; } 
    } 


public class EngineMap : EntityTypeConfiguration<Engine> 
    { 
     public EngineMap() 
     { 
      ToTable("Engines", Constants.Schema); 

      Property(t => t.MyField1).HasColumnType("nvarchar").HasMaxLength(128).IsRequired(); 
      Property(t => t.MyField2).HasColumnType("nvarchar").HasMaxLength(128).IsRequired(); 
      Property(t => t.MyField3).HasColumnType("bit").IsRequired();    
     } 
    } 


public class Engine : MyBase 
    { 
     public string MyField1 { get; set; } 
     public string MyField2 { get; set; } 
     public bool MyField3 { get; set; } 

     public virtual Car Car { get; set; } 
    } 

Используя это решение, он создает новый столбец на моем столе двигателя, что Я не хочу ...

Second Try:

Изменение CarMap на следующий код:

public class CarMap : EntityTypeConfiguration<Car> 
    { 
     public CarMap() 
     { 
      ToTable("Cars", Constants.Schema); 
      Property(t => t.EngineId); 

      HasRequired(x => x.Engine).WithOptional(p => p.Car); 
     } 
    } 

Проблема в том, что она не использует столбец EngineId хранить свои ключевые ценности FK ...

Спасибо большое за ваша помощь в любом случае ...

ответ

0

Ничего, он работает сейчас, я очистил весь свой код, удалил дополнительные отношения, которые могли быть конфликтующими, и теперь используя следующие отношения Fluent API, он работает правильно, используя только один столбец для FK (EngineId).

результирующего код первых миграций являются следующим:

CreateTable(
    "myschema.Engines", 
     c => new 
     { 
      Id = c.Int(nullable: false), 
      myfield = c.String(nullable: false, maxLength: 128), 
      myfield2 = c.String(nullable: false, maxLength: 128), 
      myfield3 = c.Boolean(nullable: false), 
     }) 
    .PrimaryKey(t => t.Id) 
    .ForeignKey("basechema.Engines", t => t.Id) 
    .Index(t => t.Id); 


CreateTable(
    "myschema.Cars", 
     c => new 
     { 
      Id = c.Int(nullable: false), 
      EngineId = c.Int(nullable: false), 
     }) 
    .PrimaryKey(t => t.Id) 
    .ForeignKey("baseschema.Cars", t => t.Id) 
    .ForeignKey("myschema.Engines", t => t.EngineId) 
    .Index(t => t.Id) 
    .Index(t => t.EngineId); 

Я надеюсь, что это помогает кто-то там;)