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)); }
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); }
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); }
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); }
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema(string.Empty); modelBuilder.AddFunctions <OracleDbContext>(); }
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); }
/// <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); } }
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.AddFunctions(typeof(NiladicFunctions)); }