繁体   English   中英

OnDelete 的 EF Core 注释

EF Core Annotation for OnDelete

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个注释问题:

        modelBuilder.Entity<FirstClass>()
            .HasOne(f => f.SecondClass)
            .WithOne(s => s.FirstClass)
            .HasForeignKey<FirstClass>(f => f.SecondClassId)
            .OnDelete(DeleteBehavior.Cascade);

如何用注释写这个? 我没有找到 OnDelete 的注释。

2 个回复

试试这个:

你的模特


public class FirstClass
    {
        [Key]
        public int Id { get; set; } 
        public int SecondClassId { get; set; }

        [ForeignKey(nameof(SecondClassId))]
        [InverseProperty("FirstClasses")]
        public virtual SecondClass SecondClass { get; set; }
    }
    public class SecondClass
    {
        [Key]
        public int Id { get; set; }
        [InverseProperty(nameof(FirstClass.SecondClass))]
        public virtual ICollection<FirstClass> FirstClasses { get; set; }

    }

如果你只想第一次和第二次尝试这个代码。 但我不推荐它,因为很难找到错误。

public class FirstClass
    {
        [Key]
        public int Id { get; set; } 
        public int SecondClassId { get; set; }

        [ForeignKey(nameof(SecondClassId))]
        [InverseProperty("FirstClass")]
        public virtual SecondClass SecondClass { get; set; }
    }
    public class SecondClass
    {
        [Key]
        public int Id { get; set; }
        [InverseProperty(nameof(FirstClass.SecondClass))]
        public virtual FirstClass FirstClass { get; set; }

    }

您的数据库上下文:


public class FirstClassDbContext : DbContext
    {
        public FirstClassDbContext()
        {
        }

        public FirstClassDbContext(DbContextOptions<FirstClassDbContext> options)
            : base(options)
        {
        }
        
        public DbSet<FirstClass> FirstClasses { get; set; }
        public DbSet<SecondClass> SecondClasses { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {

            optionsBuilder.UseSqlServer(@"Server=localhost;Database=FirstClass;Trusted_Connection=True;");
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<FirstClass>(entity =>
            {
                entity.HasOne(d => d.SecondClass)
                   .WithMany(p => p.FirstClasses)
                   .HasForeignKey(d => d.SecondClassId)
                   .OnDelete(DeleteBehavior.ClientSetNull)
                   .HasConstraintName("FK_FirstClass_SecondClass");
            });

          // or for one to one you can use yours, but I don't recommend it since
//it will be hard to find the errors and it will not do anything for you. 
//Only confusing queries.

             modelBuilder.Entity<FirstClass>()
            .HasOne(f => f.SecondClass)
            .WithOne(s => s.FirstClass)
            .HasForeignKey(d => d.SecondClassId)
            .OnDelete(DeleteBehavior.ClientSetNull)
            .HasConstraintName("FK_FirstClass_SecondClass");
        }
    }

我认为没有必要。

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

    public class FirstClass : GeneralClass
    {
        public int? DerivedClassId { get; set; }
        public string Name { get; set; }
        [InverseProperty(nameof(EFCoreTest.SecondClass.FirstClass))]
        public SecondClass SecondClass { get; set; }
        public DerivedClass DerivedClass {get; set; }
    }

    public class SecondClass : GeneralClass
    {
        public int FirstClassId { get; set; }
        public string Url { get; set; }
        [ForeignKey(nameof(FirstClassId))]
        public FirstClass FirstClass { get; set; }
    }
    
    public class ApplicationDbContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Server=(localdb)\MSSQLLocalDB;Database=sample;Trusted_Connection=True");
        }

        public DbSet<FirstClass> FirstClasses { get; set; }
        public DbSet<SecondClass> SecondClasses {get; set; }
    }

这将生成表定义

CREATE TABLE [dbo].[SecondClasses] (
    [Id]           INT            IDENTITY (1, 1) NOT NULL,
    [FirstClassId] INT            NOT NULL,
    [Url]          NVARCHAR (MAX) NULL,
    CONSTRAINT [PK_SecondClasses] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_SecondClasses_FirstClasses_FirstClassId] FOREIGN KEY ([FirstClassId]) REFERENCES [dbo].[FirstClasses] ([Id]) ON DELETE CASCADE
);


GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_SecondClasses_FirstClassId]
    ON [dbo].[SecondClasses]([FirstClassId] ASC)

;

2 如何使用注释在休眠中引入ondelete级联

我是新来的冬眠。 我需要在带有注释的休眠状态下引入删除功能。 即,一旦我们删除了父记录,就需要删除子记录,即我需要引入ondelete级联功能。 您能帮忙介绍此功能吗? 请在下面找到Java /实体代码。 能否请您帮我如何删除功能并删除将来的级联。 感谢Vijaya Kumar ...

4 Hibernate注释onDelete未提交到shema导出

我对休眠4.3.5注释有问题。 我有一个项目,在其中使用注释和休眠shema导出来生成数据库。 所有的JPA注释都可以正常工作,并且数据库生成良好。 当我想添加一个休眠注释时,问题就来了:onDelete。 shema导出会忽略此注释,并且我找不到使其工作的方法。 我进行了很多搜索,发 ...

6 如何在带注释的休眠状态下使ondelete级联

我想用注释使冬眠中的ondelete级联。 在我的POJO类中,我具有id(Long),Module模块和key作为字符串属性的属性。 我想介绍级联删除键为PK及其具有FK关系表tableText的键。 请找到下面的代码。 具有setter和getter的所有属性。 如何 ...

8 在子列表上与 EF-Core 结果不同

我有一个场景,我正在创建一个报告并且我试图返回所有行,但是有多个行的员工 ID、薪水 ID、期间 ID 相等,然后我想选择具有最新日期的行。 例如, 我想回来 这是我的代码 但我有错误 指定的过滤条件无效。 如何使用 linq 实现这一点? 提前致谢。 ...

10 EF 6数据注释

当尝试访问以下代码(从存储库中的方法)这样的类别时 给我错误 {“执行命令定义时发生错误。有关详细信息,请参见内部异常。”}内部异常:{“无效的对象名称'dbo.PageCategories'。”} 我没有表名dbo.PageCategories,我将dbo.Page ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM