加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 设置表级别WillCascadeOnDelete不可用

发布时间:2020-12-16 07:23:47 所属栏目:asp.Net 来源:网络整理
导读:我在这里拉出我的头发.我在这里看到了关闭删除级联的解决方案,但我无法实现它.我不知道我在这里做错了什么,但我一直得到以下错误: ‘System.Data.Entity.ModelConfiguration.EntityTypeConfiguration’不包含’WillCascadeOnDelete’的定义,并且没有扩展方
我在这里拉出我的头发.我在这里看到了关闭删除级联的解决方案,但我无法实现它.我不知道我在这里做错了什么,但我一直得到以下错误:

‘System.Data.Entity.ModelConfiguration.EntityTypeConfiguration’不包含’WillCascadeOnDelete’的定义,并且没有扩展方法’WillCascadeOnDelete’接受类型’System.Data.Entity.ModelConfiguration.EntityTypeConfiguration’的第一个参数可以找到(你是吗?)缺少using指令或程序集引用?)

我已经添加了必要的命名空间,但我不认为它是intellisense中的任何选项,我没有在任何地方搜索.我在VS 2010 MVC 3中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using vf2.Models;
using vf2.Models.LinkTables;
using vf2.Models.Requests;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity.ModelConfiguration.Configuration;
using System.Data.Entity.ModelConfiguration;
using vf2.Models.Reporting;
using vf2.Models.POSObj;

namespace vf2.Models
{
    public class vfContext : DbContext
    {
        public DbSet<App> Apps { get; set; }
        public DbSet<Origin> Origins { get; set; }
        public DbSet<WineType> WineTypes { get; set; }
        public DbSet<VarType> VarTypes { get; set; }
        public DbSet<Wine> Wines { get; set; }
        public DbSet<Vintage> Vintages { get; set; }

        public DbSet<Distributor> Distributors { get; set; }
        public DbSet<Importer> Importers { get; set; }
        public DbSet<Producer> Producers { get; set; }
        public DbSet<Publication> Publications { get; set; }
        public DbSet<Review> Reviews { get; set; }
        public DbSet<UserType> UserTypes { get; set; }
        public DbSet<Restaurant> Restaurants { get; set; }

        public DbSet<WineListChangeRate> WineListChangeRates { get; set; }
        public DbSet<MenuChangeRate> MenuChangeRates { get; set; }
        public DbSet<WineListCount> WineListCounts { get; set; }

        public DbSet<UserObj> UserObjs { get; set; }
        public DbSet<ProducerUser> ProducerUsers { get; set; }
        public DbSet<DistributorUser> DistributorUsers { get; set; }
        public DbSet<RestaurantUser> RestaurantUsers { get; set; }

        public DbSet<ProducerEditRequest> ProducerEditRequests { get; set; }
        public DbSet<RequestStatus> RequestStatuses { get; set; }
        public DbSet<VOAVIRequest> VOAVIRequests { get; set; }

        public DbSet<POS> POSs { get; set; }
        public DbSet<Cart> Carts { get; set; }
        public DbSet<FutureUser> FutureUsers { get; set; }
        public DbSet<Doc> Docs { get; set; }
        public DbSet<DocType> DocTypes { get; set; }

        public DbSet<WineVisit> WineVisits { get; set; }


        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {

            modelBuilder.Entity<Review>().WillCascadeOnDelete(false);
//error here!

            base.OnModelCreating(modelBuilder);
        }
    }
}

解决方法

“级联删除”是关系的配置,而不是实体/表的配置.因此,WillCascadeOnDelete是CascadableNavigationPropertyConfiguration的方法.用例示例:

modelBuilder.Entity<Review>()
    .HasRequired(r => r.Wine)
    .WithMany()
    .WillCascadeOnDelete(false);

这意味着如果从数据库中的目录中删除葡萄酒,则不应将其评论与葡萄酒一起删除.这是这种特定关系的属性,而不是评论表的属性.

在这种情况下,尝试删除具有评论的葡萄酒会导致外键约束违规和当然例外,但这是您在所需关系上禁用级联删除时通常需要的(“不允许删除葡萄酒”有评论,只允许它没有任何……“)的葡萄酒.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读