C # - EF CodeFirst - свойства HasOptional создают новые объекты - PullRequest
0 голосов
/ 28 октября 2018

У меня есть следующая модель с отображением:

public partial class BPart
{
    public Guid Id { get; set; }
    [Required]
    public Part PartNumber { get; set; }
    [Required]
    public Revision Revision { get; set; }        
    public Assembly Assembly { get; set; }        
    public Vendor Vendor { get; set; }
    public double Qty { get; set; }
    [StringLength(100)]
    public string Unit { get; set; }
    public OrderState OrderState { get; set; }        
    public string AdditionalInformation { get; set; }
    public bool IsRemoved { get; set; }
    public BPart()
    {
        Id = Guid.Empty;
        Assembly = new Assembly();
        Vendor = new Vendor();
        OrderState = new OrderState();
    }
}

public BOMPartMap()
    {
        // Primary Key
        this.HasKey(t => t.Id);
        // Properties
        this.Property(t => t.Qty);
        this.Property(t => t.Unit)
             .HasMaxLength(100);                      
        // Table & Column Mappings
        this.ToTable("BOMPart");
        this.Property(t => t.Id).HasColumnName("Id")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); ;
        this.Property(t => t.Qty).HasColumnName("Qty");
        this.Property(t => t.Unit).HasColumnName("Unit");
        this.Property(t => t.IsRemoved).HasColumnName("IsRemoved");
        this.Property(t => t.AdditionalInformation).HasColumnName("AdditionalInformation");
        this.HasRequired(t=>t.PartNumber)
            .WithMany(t=>t.BOMS)
            .Map(c => c.MapKey("PartReferenceId"));
        this.HasRequired(t => t.Revision)
            .WithMany(t => t.Parts)
            .Map(c => c.MapKey("RevisionReferenceId"));
        this.HasOptional(t => t.Assembly)
            .WithMany(t => t.Parts)
            .Map(c => c.MapKey("AssemblyReferenceId"));
        this.HasOptional(t => t.Vendor)
            .WithMany(t => t.OrderedParts)
            .Map(c => c.MapKey("VendorReferenceId"));
        this.HasOptional(t => t.OrderState)
            .WithMany(t => t.Parts)
            .Map(c => c.MapKey("OrderStateReferenceId"));
    }
}

Когда я создал новый объект BOMPart с NULLable OrderState и Vendor, EF также создал дополнительные объекты (Vendor и OrderState).Мой объект перед сохранением выглядит так:

BPart.Vendor = null
BPart.OrderState = null

Я проверил базу данных, и там в этих дополнительных полях есть check mart NULLABLE.Но я не могу понять, почему EF создает новый объект для необязательных полей.

Заранее спасибо!

...