4

ここで髪を抜いています。ここで削除時にカスケードをオフにするソリューションを見てきましたが、実装できません。ここで何が間違っているのかわかりませんが、以下のエラーが発生し続けます。

「System.Data.Entity.ModelConfiguration.EntityTypeConfiguration」には「WillCascadeOnDelete」の定義が含まれておらず、タイプ「System.Data.Entity.ModelConfiguration.EntityTypeConfiguration」の最初の引数を受け入れる拡張メソッド「WillCascadeOnDelete」が見つかりませんでした (あなたはusing ディレクティブまたはアセンブリ参照がありませんか?)

必要な名前空間を追加しましたが、インテリセンスのどこにもオプションとして表示されず、どこにも検索できません。私は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);
        }
    }
}
4

1 に答える 1

9

「カスケード削除」は、エンティティ/テーブルではなく、関係の構成です。したがってWillCascadeOnDelete、のメソッドですCascadableNavigationPropertyConfiguration。ユースケースの例:

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

これは、データベースのカタログからワインが削除された場合、そのレビューをワインと一緒に削除してはならないことを意味します。Reviewsこれは、テーブルではなく、この特定の関係のプロパティです。

この場合、レビューのあるワインを削除しようとすると、もちろん外部キー制約違反と例外が発生しますが、必要な関係でカスケード削除を無効にすると、通常はそれが必要になります(「ワインの削除を許可しないでくださいレビューがありますが、レビューがないワインにのみ許可してください...」)。

于 2012-06-04T17:01:59.497 に答える