Entity Framework Core - Unwanted Cascade Removal

I have an Entity Framework kernel that does an extra uninstall that I don't need.

Model definition: I have two objects Templateand TemplateVersion. A TemplateVersionis only the following versions of the template, therefore it TemplateVersionhas one Template(N: 1 ratio)

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

public class TemplateVersion
{
    public int Id { get; set; }
    public Template Template { get;set; }
}

And so far, everything is working clearly.

BUT : I want to have Templatelevel information , which is the current version TemplateVersion, so the definition Templatenow looks like this ( TemplateVersionmatches the previous one)

public class Template 
{
    public int Id { get; set; }
    public TemplateVersion CurrentVersion { get; set;}
}

So I want to have Ninstances TemplateVersionto point to an 1instance Template, but at the same time Templatepoint to1 TemplateVersion

: Template TemplateVersion, .

Template ---- TemplateVersionPrevious.Template == Template

TemplateVersion, Template ( Template CurrentVersion), TemplateVersion Template.

Template ---- TemplateVersionPrevious.Template == null
         ---- TemplateVersionCurrent.Template == Template

, , Entity Framework , 1:1, TemplateVersion Template - - CurrentTemplate.

Entity Framework, TemplateVersion?

: TemplateVersion

public class TemplateVersion
{
    public int Id { get; set; }
    [ForeignKey(nameof(TemplateId))]
    public Template Template { get;set; }
    public int TemplateId {get;set;}
}

: TemplateVersion !

Template ---- TemplateVersionCurrent.Template == Template
+4
1

EF . " " ( ).

API. API / , , , ( FK, , ):

public class Template 
{
    public int Id { get; set; }
    public TemplateVersion CurrentVersion { get; set; }
}

public class TemplateVersion
{
    public int Id { get; set; }
    public Template Template { get; set; }
}

:

modelBuilder.Entity<Template>()
    .HasMany<TemplateVersion>()
    .WithOne(e => e.Template)
    .IsRequired();

modelBuilder.Entity<Template>()
    .HasOne(e => e.CurrentVersion)
    .WithOne()
    .HasForeignKey<Template>("TemplateVersionId")
    .IsRequired(false);

, , . Template..TemplateVersionId , .

, " " HasOne/WithOne, HasForeignKey HasPrinciplaKey , , (, " " , , manu - ).

. Relationships.

+6

Source: https://habr.com/ru/post/1691096/


All Articles