EF映射:指定ON DELETE NO ACTION或ON UPDATE NO ACTION

时间:2016-02-27 01:31:51

标签: c# entity-framework

我想要完成的任务: 我基本上希望NWatchNode有一组关系。 然后,每个关系应该有一个Node,一个RelatedNode和一个RelationType。

以下是我收到的错误消息:

  

无法创建类NWatch.Entities.Test.NWatchTagTest的实例。   错误:System.Data.SqlClient.SqlException:介绍FOREIGN KEY   约束' FK_dbo.NWatchRelations_dbo.NWatchNodes_RelatedNodeId'上   表' NWatchRelations'可能会导致循环或多个级联路径。   指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他   FOREIGN KEY约束。

我在这里做错了什么,或者如何正确映射?

以下是我的映射:

// NWatchRelation
            modelBuilder.Entity<NWatchRelation>().Map(m =>
            {
                m.ToTable("NWatchRelations");
            });
            modelBuilder.Entity<NWatchRelation>()
                .HasKey(t => t.Id)
                .Property(t => t.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            modelBuilder.Entity<NWatchRelation>().HasRequired(t => t.Node).
                WithMany().HasForeignKey(t => t.NodeId).WillCascadeOnDelete();
            modelBuilder.Entity<NWatchRelation>().HasRequired(t => t.RelatedNode).
                WithMany().HasForeignKey(t => t.RelatedNodeId).WillCascadeOnDelete();

// NWatchNode
            modelBuilder.Entity<NWatchNode>().Map(m =>
            {
                m.MapInheritedProperties();
                m.ToTable("NWatchNodes");
            });
            modelBuilder.Configurations.Add(new NWatchObjectBaseConfiguration<NWatchNode>());
            modelBuilder.Entity<NWatchNode>().HasKey(t => t.Id).
                Property(t => t.Id).
                HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
            modelBuilder.Entity<NWatchNode>().HasRequired(t => t.NodeTypeEntity).
                WithMany(t => t.Nodes).HasForeignKey(t => t.NodeTypeId);
            modelBuilder.Entity<NWatchNode>().HasMany(t => t.Tags).WithMany(t => t.Nodes);
            modelBuilder.Entity<NWatchNode>().HasMany(t => t.MonRequests).WithMany(t => t.Nodes);
            modelBuilder.Entity<NWatchNode>().HasMany(t => t.Relations);
            modelBuilder.Entity<NWatchNode>().Property(t => t.Location).IsOptional().HasMaxLength(100);
            modelBuilder.Entity<NWatchNode>().Ignore(t => t.SourceDefinitions);
            modelBuilder.Entity<NWatchNode>().Ignore(t => t.NodeType);

0 个答案:

没有答案