Пример #1
0
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            // Add functions to model.
            modelBuilder.AddFunctions <AdventureWorks>();
            modelBuilder.AddFunctions(typeof(AdventureWorksFunctions));
            modelBuilder.AddFunctions(typeof(ModelDefinedFunctions));
            modelBuilder.AddFunctions(typeof(BuiltInFunctions));
            modelBuilder.AddFunctions(typeof(NiladicFunctions));
        }
Пример #2
0
 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
     //add both (Function returntype and the actual function) to your modelbuilder.
     modelBuilder.ComplexType <FunctionReturnType>();
     modelBuilder.AddFunctions(typeof(_YourDatabaseContextName_), false);
     base.OnModelCreating(modelBuilder);
 }
        public static void AddFunctions <TFunctions>(
            this DbModelBuilder modelBuilder, bool addComplexTypesFromAssembly = true)
        {
            if (modelBuilder == null)
            {
                throw new ArgumentNullException(nameof(modelBuilder));
            }

            modelBuilder.AddFunctions(typeof(TFunctions), addComplexTypesFromAssembly);
        }
Пример #4
0
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //Conventions
            modelBuilder.Conventions.Remove <System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>();
            modelBuilder.Conventions.Remove <System.Data.Entity.ModelConfiguration.Conventions.PluralizingEntitySetNameConvention>();

            //Schema
            string defaultSchema = "dbo";

            modelBuilder.HasDefaultSchema(defaultSchema);
            modelBuilder.SetEntitySchema("Addressing", typeof(City), typeof(Province));

            //Keys
            modelBuilder.Entity <Student>().HasKey(e => e.Id).Property(e => e.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            modelBuilder.Entity <City>().HasKey(e => e.Id).Property(e => e.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            modelBuilder.Entity <Province>().HasKey(e => e.Id).Property(e => e.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            modelBuilder.Entity <StudentView>().HasKey(e => e.Id);

            //Relationships
            modelBuilder.Entity <City>().HasMany <Student>(e => e.Student).WithOptional(e => e.City).HasForeignKey(e => e.CityRef);

            //ComplexTypes
            modelBuilder.ComplexType <fnGetNamesResult>();
            modelBuilder.AddComplexTypes
            (
                typeof(fnGetNamesResult),
                typeof(spGetNamesResult),
                typeof(fnGetStudentsResult),
                typeof(spGetStudentsResult),
                typeof(spGetNamesAndCityNamesResult),
                typeof(spGetNamesAndCityNamesResult2)
            );
            //modelBuilder.AddComplexTypes(typeof(Student).Assembly);

            //Function Conventions
            modelBuilder.AddFunctions <DBTestDbContext>(defaultSchema);

            base.OnModelCreating(modelBuilder);
        }
Пример #5
0
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            /* See https://weblogs.asp.net/dixin/entityframework.functions
             * for detailed description about working with stored functions and procedures */
            modelBuilder.AddFunctions <UsersRepo>();

            modelBuilder.Entity <CommentLike>()
            .HasRequired(x => x.Comment)
            .WithMany(x => x.Likes)
            .HasForeignKey(x => x.CommentId)
            .WillCascadeOnDelete(false);

            modelBuilder.Entity <GroupMember>()
            .HasRequired(m => m.Group)
            .WithMany(g => g.Members)
            .HasForeignKey(m => m.GroupId)
            .WillCascadeOnDelete(false);

            CancelCascaseDeleting <ExerciseCodeReview, ApplicationUser, string>(modelBuilder, c => c.Author, c => c.AuthorId);

            modelBuilder.Entity <Like>()
            .HasRequired(l => l.Submission)
            .WithMany(s => s.Likes)
            .HasForeignKey(l => l.SubmissionId)
            .WillCascadeOnDelete(false);

            CancelCascaseDeleting <UserExerciseSubmission, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);
            CancelCascaseDeleting <ManualExerciseChecking, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);

            CancelCascaseDeleting <Certificate, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);
            CancelCascaseDeleting <Certificate, ApplicationUser, string>(modelBuilder, c => c.Instructor, c => c.InstructorId);

            CancelCascaseDeleting <AdditionalScore, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);
            CancelCascaseDeleting <AdditionalScore, ApplicationUser, string>(modelBuilder, c => c.Instructor, c => c.InstructorId);
        }
Пример #6
0
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.HasDefaultSchema(string.Empty);

            modelBuilder.AddFunctions <OracleDbContext>();
        }
Пример #7
0
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            /* See https://weblogs.asp.net/dixin/entityframework.functions
             * for detailed description about working with stored functions and procedures */
            modelBuilder.AddFunctions <UsersRepo>();
            modelBuilder.AddFunctions <GradersRepo>();

            modelBuilder.Entity <CommentLike>()
            .HasRequired(x => x.Comment)
            .WithMany(x => x.Likes)
            .HasForeignKey(x => x.CommentId)
            .WillCascadeOnDelete(false);

            modelBuilder.Entity <GroupMember>()
            .HasRequired(m => m.Group)
            .WithMany(g => g.Members)
            .HasForeignKey(m => m.GroupId)
            .WillCascadeOnDelete(false);

            modelBuilder.Entity <Like>()
            .HasRequired(l => l.Submission)
            .WithMany(s => s.Likes)
            .HasForeignKey(l => l.SubmissionId)
            .WillCascadeOnDelete(false);

            modelBuilder.Entity <NotificationDelivery>()
            .HasRequired(d => d.Notification)
            .WithMany(n => n.Deliveries)
            .HasForeignKey(d => d.NotificationId)
            .WillCascadeOnDelete(true);

            modelBuilder.Entity <UserQuizSubmission>()
            .HasOptional(s => s.AutomaticChecking)
            .WithRequired(c => c.Submission)
            .WillCascadeOnDelete(false);

            modelBuilder.Entity <UserQuizSubmission>()
            .HasOptional(s => s.ManualChecking)
            .WithRequired(c => c.Submission)
            .WillCascadeOnDelete(false);

            modelBuilder.Entity <UserRole>().HasRequired(r => r.User).WithMany().HasForeignKey(r => r.UserId).WillCascadeOnDelete();

            CancelCascaseDeleting <ExerciseCodeReview, ApplicationUser, string>(modelBuilder, c => c.Author, c => c.AuthorId);

            CancelCascaseDeleting <UserExerciseSubmission, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);
            CancelCascaseDeleting <ManualExerciseChecking, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);

            CancelCascaseDeleting <ExerciseCodeReviewComment, ApplicationUser, string>(modelBuilder, c => c.Author, c => c.AuthorId);
//			CancelCascaseDeleting<ExerciseCodeReviewComment, ExerciseCodeReview, int>(modelBuilder, c => c.Review, c => c.ReviewId);

            CancelCascaseDeleting <Certificate, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);
            CancelCascaseDeleting <Certificate, ApplicationUser, string>(modelBuilder, c => c.Instructor, c => c.InstructorId);

            CancelCascaseDeleting <AdditionalScore, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);
            CancelCascaseDeleting <AdditionalScore, ApplicationUser, string>(modelBuilder, c => c.Instructor, c => c.InstructorId);

            CancelCascaseDeleting <GraderClient, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);

            CancelCascaseDeleting <Notification, ApplicationUser, string>(modelBuilder, c => c.InitiatedBy, c => c.InitiatedById);
            CancelCascaseDeleting <AddedInstructorNotification, ApplicationUser, string>(modelBuilder, c => c.AddedUser, c => c.AddedUserId);
            CancelCascaseDeleting <LikedYourCommentNotification, ApplicationUser, string>(modelBuilder, c => c.LikedUser, c => c.LikedUserId);
            CancelCascaseDeleting <JoinedToYourGroupNotification, ApplicationUser, string>(modelBuilder, c => c.JoinedUser, c => c.JoinedUserId);
            CancelCascaseDeleting <JoinedToYourGroupNotification, Group, int>(modelBuilder, c => c.Group, c => c.GroupId);
            CancelCascaseDeleting <GrantedAccessToGroupNotification, GroupAccess, int>(modelBuilder, c => c.Access, c => c.AccessId);
            CancelCascaseDeleting <RevokedAccessToGroupNotification, GroupAccess, int>(modelBuilder, c => c.Access, c => c.AccessId);
            CancelCascaseDeleting <GroupMemberHasBeenRemovedNotification, Group, int>(modelBuilder, c => c.Group, c => c.GroupId);
            CancelCascaseDeleting <GroupMemberHasBeenRemovedNotification, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);
            CancelCascaseDeleting <GroupMembersHaveBeenRemovedNotification, Group, int>(modelBuilder, c => c.Group, c => c.GroupId);
            CancelCascaseDeleting <GroupMembersHaveBeenAddedNotification, Group, int>(modelBuilder, c => c.Group, c => c.GroupId);
            CancelCascaseDeleting <CreatedGroupNotification, Group, int>(modelBuilder, c => c.Group, c => c.GroupId);
            CancelCascaseDeleting <PassedManualExerciseCheckingNotification, ManualExerciseChecking, int>(modelBuilder, c => c.Checking, c => c.CheckingId);
            CancelCascaseDeleting <PassedManualQuizCheckingNotification, ManualQuizChecking, int>(modelBuilder, c => c.Checking, c => c.CheckingId);
            CancelCascaseDeleting <ReceivedAdditionalScoreNotification, AdditionalScore, int?>(modelBuilder, c => c.Score, c => c.ScoreId, isRequired: false);

            CancelCascaseDeleting <NewCommentNotification, Comment, int>(modelBuilder, c => c.Comment, c => c.CommentId);
            CancelCascaseDeleting <NewCommentFromYourGroupStudentNotification, Comment, int>(modelBuilder, c => c.Comment, c => c.CommentId);
            CancelCascaseDeleting <LikedYourCommentNotification, Comment, int>(modelBuilder, c => c.Comment, c => c.CommentId);
            CancelCascaseDeleting <RepliedToYourCommentNotification, Comment, int>(modelBuilder, c => c.Comment, c => c.CommentId);
            CancelCascaseDeleting <RepliedToYourCommentNotification, Comment, int>(modelBuilder, c => c.ParentComment, c => c.ParentCommentId);
            CancelCascaseDeleting <NewCommentForInstructorsOnlyNotification, Comment, int>(modelBuilder, c => c.Comment, c => c.CommentId);

            CancelCascaseDeleting <UploadedPackageNotification, CourseVersion, Guid>(modelBuilder, c => c.CourseVersion, c => c.CourseVersionId);
            CancelCascaseDeleting <PublishedPackageNotification, CourseVersion, Guid>(modelBuilder, c => c.CourseVersion, c => c.CourseVersionId);

            CancelCascaseDeleting <CourseExportedToStepikNotification, StepikExportProcess, int>(modelBuilder, c => c.Process, c => c.ProcessId);

            CancelCascaseDeleting <XQueueWatcher, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);

            CancelCascaseDeleting <StepikExportProcess, ApplicationUser, string>(modelBuilder, c => c.Owner, c => c.OwnerId);

            CancelCascaseDeleting <NotificationTransport, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId, isRequired: false);

            CancelCascaseDeleting <GroupAccess, ApplicationUser, string>(modelBuilder, c => c.User, c => c.UserId);
            CancelCascaseDeleting <GroupAccess, ApplicationUser, string>(modelBuilder, c => c.GrantedBy, c => c.GrantedById);

            CancelCascaseDeleting <LabelOnGroup, Group, int>(modelBuilder, c => c.Group, c => c.GroupId);
            CancelCascaseDeleting <GroupLabel, ApplicationUser, string>(modelBuilder, c => c.Owner, c => c.OwnerId);
            CancelCascaseDeleting <LabelOnGroup, GroupLabel, int>(modelBuilder, c => c.Label, c => c.LabelId);

            CancelCascaseDeleting <SystemAccess, ApplicationUser, string>(modelBuilder, c => c.GrantedBy, c => c.GrantedById);
        }
Пример #8
0
        /// <summary>	Adds the actions to model. </summary>
        ///
        /// <param name="modelBuilder">		    The builder that defines the model for the context being
        ///                                     created. </param>
        /// <param name="schema">			    The schema. </param>
        /// <param name="dynamicClassFactory">	The dynamic class factory. </param>
        ///
        /// <returns>	A Type. </returns>
        private static void AddActionsToModel(
            DbModelBuilder modelBuilder,
            DatabaseSchema schema,
            DynamicClassFactory dynamicClassFactory)
        {
            foreach (var function in schema.Functions)
            {
                try
                {
                    if (function.ReturnType != null)
                    {
                        var dynamicMethodData = new DynamicMethodData
                        {
                            FunctionType = FunctionType.ModelDefinedFunction,
                            ReturnType   = typeof(Int32),
                            Schema       = function.SchemaOwner
                        };
                        if (function.Arguments.Count > 0)
                        {
                            dynamicMethodData.Params = new DynamicParameterData[function.Arguments.Count];
                            for (int i = 0; i < function.Arguments.Count; i++)
                            {
                                dynamicMethodData.Params[i] = new DynamicParameterData()
                                {
                                    Name   = function.Arguments[i].Name,
                                    Type   = function.Arguments[i].DataType.GetNetType(),
                                    isIn   = function.Arguments[i].In,
                                    isOut  = function.Arguments[i].Out,
                                    Length = function.Arguments[i].Length
                                };
                            }
                        }
                        _dynamicActionMethods.Add(function.Name, dynamicMethodData);
                    }
                }
                catch (Exception exception)
                {
                    DynamicLogger.Instance.WriteLoggerLogError(string.Format("AddActionsToModel: function '{0}'", function.Name), exception);
                }
            }

            foreach (var procedure in schema.StoredProcedures)
            {
                try
                {
                    var dynamicMethodData = new DynamicMethodData
                    {
                        FunctionType = FunctionType.ModelDefinedFunction,
                        ReturnType   = typeof(Int32),
                        Schema       = procedure.SchemaOwner
                    };
                    if (procedure.Arguments.Count > 0)
                    {
                        dynamicMethodData.Params = new DynamicParameterData[procedure.Arguments.Count];
                        for (int i = 0; i < procedure.Arguments.Count; i++)
                        {
                            dynamicMethodData.Params[i] = new DynamicParameterData()
                            {
                                Name   = procedure.Arguments[i].Name,
                                Type   = procedure.Arguments[i].DataType.GetNetType(),
                                isIn   = procedure.Arguments[i].In,
                                isOut  = procedure.Arguments[i].Out,
                                Length = procedure.Arguments[i].Length
                            };
                        }
                    }
                    _dynamicActionMethods.Add(procedure.Name, dynamicMethodData);
                }
                catch (Exception exception)
                {
                    DynamicLogger.Instance.WriteLoggerLogError(string.Format("AddActionsToModel: procedure '{0}'", procedure.Name), exception);
                }
            }

            try
            {
                _dynamicActions = CreateTypeAction(dynamicClassFactory, "DbActions", _dynamicActionMethods);
                // https://www.nuget.org/packages/EntityFramework.Functions
                modelBuilder.AddFunctions(_dynamicActions, false);
            }
            catch (Exception exception)
            {
                DynamicLogger.Instance.WriteLoggerLogError("AddActionsToModel", exception);
            }
        }
        /// <summary>	Adds the actions to model. </summary>
        ///
        /// <param name="modelBuilder">		  	The builder that defines the model for the context being
        /// 									created. </param>
        /// <param name="schema">			  	The schema. </param>
        /// <param name="dynamicClassFactory">	The dynamic class factory. </param>
        ///
        /// <returns>	A Type. </returns>
        private static void AddActionsToModel(
            DbModelBuilder modelBuilder,
            DatabaseSchema schema,
            DynamicClassFactory dynamicClassFactory)
        {
            foreach (var function in schema.Functions)
            {
                try
                {
                    if (function.ReturnType != null)
                    {
                        var dynamicMethodData = new DynamicMethodData();
                        dynamicMethodData.FunctionType = FunctionType.ModelDefinedFunction;
                        dynamicMethodData.ReturnType = typeof(Int32);
                        dynamicMethodData.Schema = function.SchemaOwner;
                        if (function.Arguments.Count > 0)
                        {
                            dynamicMethodData.Params = new DynamicParameterData[function.Arguments.Count];
                            for (int i = 0; i < function.Arguments.Count; i++)
                            {
                                dynamicMethodData.Params[i] = new DynamicParameterData()
                                {
                                    Name = function.Arguments[i].Name,
                                    Type = function.Arguments[i].DataType.GetNetType(),
                                    isIn = function.Arguments[i].In,
                                    isOut = function.Arguments[i].Out,
                                    Length = function.Arguments[i].Length
                                };
                            }
                        }
                        _dynamicActionMethods.Add(function.Name, dynamicMethodData);
                    }
                }
                catch (Exception exception)
                {
                    DynamicLogger.Instance.WriteLoggerLogError("AddActionsToModel", exception);
                }
            }

            foreach (var procedure in schema.StoredProcedures)
            {
                try
                {
                    var dynamicMethodData = new DynamicMethodData();
                    dynamicMethodData.FunctionType = FunctionType.ModelDefinedFunction;
                    dynamicMethodData.ReturnType = typeof(Int32);
                    dynamicMethodData.Schema = procedure.SchemaOwner;
                    if (procedure.Arguments.Count > 0)
                    {
                        dynamicMethodData.Params = new DynamicParameterData[procedure.Arguments.Count];
                        for (int i = 0; i < procedure.Arguments.Count; i++)
                        {
                            dynamicMethodData.Params[i] = new DynamicParameterData()
                            {
                                Name = procedure.Arguments[i].Name,
                                Type = procedure.Arguments[i].DataType.GetNetType(),
                                isIn = procedure.Arguments[i].In,
                                isOut = procedure.Arguments[i].Out,
                                Length = procedure.Arguments[i].Length
                            };
                        }
                    }
                    _dynamicActionMethods.Add(procedure.Name, dynamicMethodData);
                }
                catch (Exception exception)
                {
                    DynamicLogger.Instance.WriteLoggerLogError("AddActionsToModel", exception);
                }
            }

            try
            {
                _dynamicActions = CreateTypeAction(dynamicClassFactory, "DbActions", _dynamicActionMethods);
                // https://www.nuget.org/packages/EntityFramework.Functions
                modelBuilder.AddFunctions(_dynamicActions, false);
            }
            catch (Exception exception)
            {
                DynamicLogger.Instance.WriteLoggerLogError("AddActionsToModel", exception);
            }
        }
Пример #10
0
 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
     modelBuilder.AddFunctions(typeof(NiladicFunctions));
 }