コード例 #1
0
        public void Deleting_Principal_With_Include_Will_Remove_Dependent()
        {
            // Populate data
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                context.Blogs.AddRange(GenerateData());
                context.SaveChanges();
            }

            // Update post through its principal
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var blog = context.Blogs.Include(b => b.Posts).FirstOrDefault(b => b.Url == "https://timheuer.com/blog/");
                Assert.IsNotNull(blog);
                context.Blogs.Remove(blog);
                context.SaveChanges();
            }

            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                // Blog is removed
                var blog = context.Blogs.FirstOrDefault(b => b.Url == "https://timheuer.com/blog/");
                Assert.IsNull(blog);

                // Post IS REMOVED
                var post = context.Posts.FirstOrDefault(p => p.Title.Contains("Deploying .NET Core 3"));
                Assert.IsNull(post);
            }
        }
コード例 #2
0
 public void SetUp()
 {
     using (var context = new OtmContext(ContextOptions, IsRequired))
     {
         context.Database.EnsureCreated();
     }
 }
コード例 #3
0
        public void Deleting_Principal_Will_Remove_Dependent()
        {
            // Populate data
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                context.Blogs.AddRange(GenerateData());
                context.SaveChanges();
            }

            // Update post through its principal
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var blog = context.Blogs.FirstOrDefault(b => b.Url == "https://timheuer.com/blog/");
                Assert.IsNotNull(blog);
                context.Blogs.Remove(blog);
                context.SaveChanges();
            }

            // Dependent entities are removed
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var blog = context.Blogs.FirstOrDefault(b => b.Url == "https://timheuer.com/blog/");
                Assert.IsNull(blog);

                var post1 = context.Posts.FirstOrDefault(p => p.Title == "Deploying .NET Core 3 apps as self-contained");
                Assert.IsNull(post1);

                var post2 = context.Posts.FirstOrDefault(p => p.Title == "Skipping CI in GitHub Actions Workflows");
                Assert.IsNull(post2);
            }
        }
コード例 #4
0
ファイル: ContextController.cs プロジェクト: hemerfc/otm
        public IActionResult disableContext([FromBody] ContextInput form)
        {
            var result      = new ResultApi();
            var configFiles = ConfigService.Get(form.Name);
            var otmService  = new OtmContext(configFiles, Logger);

            _contexts.Add(form.Name, otmService);

            try
            {
                foreach (var ctx in _contexts.Values)
                {
                    ctx.Initialize();
                    form.Enabled = ctx.Stop();
                    ContextService.CreateOrEditContext(form);
                }

                result.result = true;
            }
            catch (Exception e)
            {
                result.result  = false;
                result.message = e.Message;
            }

            return(Ok(result));
        }
コード例 #5
0
        public void Can_Update_Dependent_Alone()
        {
            // Populate data
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                context.Blogs.AddRange(GenerateData());
                context.SaveChanges();
            }

            // Update post through its principal
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var post = context.Posts.FirstOrDefault(p => p.Title.Contains("Deploying .NET Core 3"));
                Assert.IsNotNull(post);

                post.Title = "Deploying .NET 5 apps as self-contained";
                context.SaveChanges();
            }

            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var post = context.Posts.FirstOrDefault(p => p.Title.Contains("Deploying .NET 5 apps"));
                Assert.IsNotNull(post);
            }
        }
コード例 #6
0
        public void Deleting_DEPENDENT_Has_No_Effect_On_Principal()
        {
            // Populate data
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                context.Blogs.AddRange(GenerateData());
                context.SaveChanges();
            }

            // Update post through its principal
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var post = context.Posts.FirstOrDefault(p => p.Title.Contains("Deploying .NET Core 3"));
                Assert.IsNotNull(post);
                context.Posts.Remove(post);
                context.SaveChanges();
            }

            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                // Post is deleted
                var post = context.Posts.FirstOrDefault(p => p.Title.Contains("Deploying .NET Core 3"));
                Assert.IsNull(post);

                // PRincipal not removed
                var blog = context.Blogs.FirstOrDefault(b => b.Url == "https://timheuer.com/blog/");
                Assert.IsNotNull(blog);
            }
        }
コード例 #7
0
        public void Can_Update_Dependent_Through_Principal_With_Include()
        {
            // Populate data
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                context.Blogs.AddRange(GenerateData());
                context.SaveChanges();
            }

            // Update post through its principal
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var blog = context.Blogs.Include(b => b.Posts).FirstOrDefault(b => b.Url == "https://timheuer.com/blog/");
                Assert.IsNotNull(blog);
                Assert.IsNotNull(blog.Posts);

                var post = blog.Posts.FirstOrDefault(p => p.Title.Contains("Deploying .NET Core 3"));
                Assert.IsNotNull(post);

                post.Title = "Deploying .NET 5 apps as self-contained";
                context.SaveChanges();
            }

            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var post = context.Posts.FirstOrDefault(p => p.Title.Contains("Deploying .NET 5 apps"));
                Assert.IsNotNull(post);
            }
        }
コード例 #8
0
        public void Deleting_Principal_With_Include_SUCCEED_Has_No_Effect_On_Dependent()
        {
            // Populate data
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                context.Blogs.AddRange(GenerateData());
                context.SaveChanges();
            }

            // Update post through its principal
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var blog = context.Blogs.Include(b => b.Posts).FirstOrDefault(b => b.Url == "https://timheuer.com/blog/");
                Assert.IsNotNull(blog);
                context.Blogs.Remove(blog);
                context.SaveChanges();
            }

            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                // Blog is removed
                var blog = context.Blogs.FirstOrDefault(b => b.Url == "https://timheuer.com/blog/");
                Assert.IsNull(blog);

                // Post still alive
                var post = context.Posts.FirstOrDefault(p => p.Title.Contains("Deploying .NET Core 3"));
                Assert.IsNotNull(post);

                var post2 = context.Posts.FirstOrDefault(p => p.Title == "Skipping CI in GitHub Actions Workflows");
                Assert.IsNotNull(post2);
            }
        }
コード例 #9
0
 public void TearDown()
 {
     using (var context = new OtmContext(ContextOptions, IsRequired))
     {
         context.Database.EnsureDeleted();
     }
 }
コード例 #10
0
 public void Can_NOT_Create_Dependent_Without_Principal()
 {
     using (var context = new OtmContext(ContextOptions, IsRequired))
     {
         var post = new Post {
             Title = "Test Post", Content = "No content"
         };
         context.Posts.Add(post);
         Assert.That(() => context.SaveChanges(), Throws.Exception);
     }
 }
コード例 #11
0
        public void Can_Create_Dependent_Without_Principal()
        {
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var post = new Post {
                    Title = "Test Post", Content = "No content"
                };
                context.Posts.Add(post);
                context.SaveChanges();
            }

            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var post = context.Posts.FirstOrDefault(p => p.Title == "Test Post");
                Assert.IsNotNull(post);
            }
        }
コード例 #12
0
        public void Can_Create_Principal_Without_Dependent()
        {
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var blog = new Blog {
                    Url = "https://medium.com/@bc"
                };
                context.Blogs.Add(blog);
                context.SaveChanges();
            }

            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var blog = context.Blogs.FirstOrDefault(b => b.Url == "https://medium.com/@bc");
                Assert.IsNotNull(blog);
            }
        }
コード例 #13
0
ファイル: ContextController.cs プロジェクト: hemerfc/otm
        public IActionResult ActivedContext([FromBody] ContextInput form)
        {
            var result      = new ResultApi();
            var configFiles = ConfigService.Get(form.Name);

            if (configFiles.DataPoints == null)
            {
                result.result  = false;
                result.message = "Data point não foi criado!";
            }
            else if (configFiles.Devices == null)
            {
                result.result  = false;
                result.message = "Device não foi criado!";
            }
            else if (configFiles.Transactions == null)
            {
                result.result  = false;
                result.message = "Transaction não foi criada!";
            }
            else
            {
                var otmService = new OtmContext(configFiles, Logger);
                _contexts.Add(form.Name, otmService);

                try
                {
                    foreach (var ctx in _contexts.Values)
                    {
                        ctx.Initialize();
                        form.Enabled = ctx.Start();
                        ContextService.CreateOrEditContext(form);
                    }

                    result.result = true;
                }
                catch (Exception e)
                {
                    result.result  = false;
                    result.message = e.Message;
                }
            }

            return(Ok(result));
        }
コード例 #14
0
        public void Deleting_Principal_FAILS_Without_Including_Dependent()
        {
            // Populate data
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                context.Blogs.AddRange(GenerateData());
                context.SaveChanges();
            }

            // Delete fails for principal entity because it needs to have navigation property loaded to set FK to NULL.
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var blog = context.Blogs.FirstOrDefault(b => b.Url == "https://timheuer.com/blog/");
                Assert.IsNotNull(blog);
                context.Blogs.Remove(blog);
                Assert.That(() => context.SaveChanges(), Throws.Exception);
            }
        }
コード例 #15
0
ファイル: StatusService.cs プロジェクト: hemerfc/otm
        private static ContextStatusDto GetOtmContextStatus(OtmContext ctx)
        {
            var ctxStatus = new ContextStatusDto
            {
                Name            = ctx.Config.Name,
                Enabled         = ctx.Config.Enabled,
                DeviceStatus    = new Dictionary <string, DeviceStatusDto>(),
                DataPointStatus = new Dictionary <string, DataPointStatusDto>()
            };

            if (ctx.Devices != null)
            {
                foreach (var device in ctx.Devices.Values)
                {
                    var deviceStatusDto = new DeviceStatusDto
                    {
                        Name          = device.Name,
                        Enabled       = device.Enabled,
                        Connected     = device.Connected,
                        LastErrorTime = device.LastErrorTime,
                        TagValues     = device.TagValues
                    };

                    ctxStatus.DeviceStatus[device.Name] = deviceStatusDto;
                }
            }

            if (ctx.DataPoints != null)
            {
                foreach (var dataPoint in ctx.DataPoints.Values)
                {
                    var datapointStatusDto = new DataPointStatusDto
                    {
                        Name          = dataPoint.Name,
                        DebugMessages = dataPoint.DebugMessages,
                        Script        = dataPoint.Script,
                        Driver        = dataPoint.Driver,
                    };

                    ctxStatus.DataPointStatus[dataPoint.Name] = datapointStatusDto;
                }
            }
            return(ctxStatus);
        }
コード例 #16
0
        public void Can_NOT_Update_Dependent_Through_Principal_Without_Include()
        {
            // Populate data
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                context.Blogs.AddRange(GenerateData());
                context.SaveChanges();
            }

            // Update post through its principal
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var blog = context.Blogs.FirstOrDefault(b => b.Url == "https://timheuer.com/blog/");
                Assert.IsNotNull(blog);
                // Since it is initialized by default, dependent is not null
                Assert.IsNotNull(blog.Posts);
                Assert.AreEqual(0, blog.Posts.Count);
            }
        }
コード例 #17
0
        public void Can_Create_Dependent_With_Principal_Only()
        {
            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var post = new Post {
                    Title = "Test Post", Content = "No content", Blog = new Blog {
                        Url = "https://medium.com"
                    }
                };
                context.Posts.Add(post);
                context.SaveChanges();
            }

            using (var context = new OtmContext(ContextOptions, IsRequired))
            {
                var post = context.Posts.Include(p => p.Blog).FirstOrDefault(p => p.Title == "Test Post");
                Assert.IsNotNull(post);
                Assert.IsNotNull(post.Blog);
            }
        }
コード例 #18
0
        public static void Run(DbContextOptions options, bool isRequired = false)
        {
            Console.WriteLine("----- CREATE -----");
            using (var context = new OtmContext(options, isRequired))
            {
                context.Database.EnsureDeleted();
                context.Database.EnsureCreated();

                //
                Console.Write("Creating a new blog w/o posts");
                var blog1 = new Blog {
                    Url = "http://blogs.msdn.com/adonet"
                };
                context.Blogs.Add(blog1);
                context.SaveChanges();
                Console.WriteLine("==> Done.");

                Console.Write("Creating a new blog with posts");
                var blog2 = new Blog {
                    Url = "https://wordpress.com"
                };
                blog2.Posts.AddRange(
                    new List <Post>
                {
                    new Post {
                        Title = "My first app", Content = "I wrote an app using EF Core 1"
                    },
                    new Post {
                        Title = "My second app", Content = "I wrote an app using EF Core 2"
                    }
                });
                context.Blogs.Add(blog2);
                context.SaveChanges();
                Console.WriteLine("==> Done");

                //
                Console.Write("Creating post w/o blog");
                var post3 = new Post {
                    Title = "EF Core Tutorial", Content = "Getting started with EF Core"
                };
                context.Posts.Add(post3);
                try
                {
                    context.SaveChanges();
                    Console.WriteLine("==> Done");
                }
                catch (Exception)
                {
                    context.Entry(post3).State = EntityState.Detached;
                    context.Posts.Remove(post3);
                    Console.WriteLine("==> FAILED: Can not save post w/o blog. Provide a required relationship.");
                }

                //
                Console.Write("Creating a post w/ blog");
                var post4 = new Post
                {
                    Title   = "Swift tutorial",
                    Content = "Learn how to code Swift.",
                    Blog    = new Blog {
                        Url = "https://medium.com/@bc/swift"
                    }
                };
                context.Posts.Add(post4);
                try
                {
                    context.SaveChanges();
                    Console.WriteLine("==> Done");
                }
                catch (Exception)
                {
                    context.Entry(post4).State = EntityState.Detached;
                    context.Posts.Remove(post4);
                    Console.WriteLine("==>FAILED: Can not save the post w/ blog");
                }
            }

            Console.WriteLine("----- QUERY -----");
            using (var context = new OtmContext(options, isRequired))
            {
                Console.Write("Querying for a blog w/o post");
                var foundBlog1 = context.Blogs.First(b => b.Url == "http://blogs.msdn.com/adonet");
                if (foundBlog1 != null)
                {
                    Console.WriteLine("==> Done: Blog1 with Url{0} found", "http://blogs.msdn.com/adonet");
                }
                else
                {
                    Console.WriteLine("==> Failed: Can not find Blog with Url: {0}", "http://blogs.msdn.com/adonet");
                }

                //
                Console.Write("Querying for a blog w posts");
                var foundBlog2 = context.Blogs.FirstOrDefault(b => b.Url == "https://wordpress.com");
                if (foundBlog2 == null)
                {
                    Console.WriteLine("Not found. Querying with .Include() method.");
                    foundBlog2 = context.Blogs.Include(b => b.Posts).FirstOrDefault(b => b.Url == "https://wordpress.com");
                }
                Console.WriteLine("==> Done: Blog w/ Posts with Url{0} found", foundBlog2.Url);

                //
                Console.Write("Querying for post w/o blog");
                var foundPost1 = context.Posts.FirstOrDefault(p => p.Title == "EF Core Tutorial");
                if (foundPost1 != null)
                {
                    Console.WriteLine("==> Done: Post w/ blog is found. Title: {0}", foundPost1.Title);
                }
                else
                {
                    Console.WriteLine("==> Failed: Can not find post w/ blog.");
                }

                //
                Console.Write("Querying for a post w blog");
                var foundPost2 = context.Posts.FirstOrDefault(p => p.Blog.Url == "https://medium.com/@bc/swift");
                if (foundPost2 == null)
                {
                    Console.WriteLine("Can not find the post w/ blog. Using .Include()");
                    foundPost2 = context.Posts.Include(p => p.Blog).FirstOrDefault(p => p.Blog.Url == "https://medium.com/@bc/swift");
                }
                Console.WriteLine("==> Done: Post w blog is found");
            }

            Console.WriteLine("----- UPDATE -----");
            using (var context = new OtmContext(options, isRequired))
            {
                Console.Write("Update a blog w/o post by adding a post");
                var foundBlog1 = context.Blogs.FirstOrDefault(b => b.Url == "http://blogs.msdn.com/adonet");
                foundBlog1.Posts.Add(
                    new Post {
                    Title = "How to create Hello, World app in C++", Content = "This is a very very long story"
                }
                    );
                context.SaveChanges();
                Console.Write("==>Done");

                Console.Write("Update a blog's post");
                // Need to include navigation property
                var foundBlog2 = context.Blogs.Include(b => b.Posts).FirstOrDefault(b => b.Url == "https://wordpress.com");
                foundBlog2.Posts.Add(new Post {
                    Title = "Smart pointers in C++", Content = "Smart pointers are sometimes life-savers...."
                });
                context.SaveChanges();
                Console.WriteLine("==> Done");

                Console.Write("Updating a post w/o blog by adding a blog");
                var foundPost1 = context.Posts.FirstOrDefault(p => p.Title == "EF Core Tutorial");
                if (foundPost1 == null)
                {
                    Console.WriteLine("==> FAILED: Can not find the post w/o a blog record. Make sure the relationship is optional");
                }
                else
                {
                    foundPost1.Blog = new Blog {
                        Url = "https://medium.com/@someone/do-coding"
                    };
                    context.SaveChanges();
                    Console.WriteLine("==> Done: Post w/o blog is found and updated");
                }


                Console.Write("Updating a post w/ blog");
                var foundPost2 = context.Posts.Include(p => p.Blog).FirstOrDefault(p => p.Blog.Url == "https://medium.com/@bc/swift");
                if (foundPost2 == null)
                {
                    Console.WriteLine("==> FAILED: Can not find a post w/ blog Url: {0}", "https://medium.com/@bc/swift");
                }
                else
                {
                    foundPost2.Title = "Do some Swift stuff";
                    context.SaveChanges();
                    Console.WriteLine("==> Done: The post w/ blog is found and updated");
                }
            }

            Console.WriteLine("----- DELETE -----");
            using (var context = new OtmContext(options, isRequired))
            {
                // Delete
                Console.Write("Delete a blog w/ post");
                var foundBlog = context.Blogs.Include(b => b.Posts).FirstOrDefault(b => b.Posts.Any(p => p.Title == "How to create Hello, World app in C++"));
                if (foundBlog == null)
                {
                    Console.WriteLine("==>FAILED: Can not find a blog w/ post titled: {0}", "How to create Hello, World app in C++");
                }
                else
                {
                    // this will remove the dependent posts if the relationship is required.
                    context.Blogs.Remove(foundBlog);
                    context.SaveChanges();
                    Console.WriteLine("==> Done: Blog is removed");
                }

                Console.Write("Delete a post w/blog");
                // since post is dependent, it does not affect its principal entity
                var foundPost = context.Posts.FirstOrDefault(p => p.Title == "My first app");
                if (foundPost == null)
                {
                    Console.WriteLine("==> Can not find a post w/ blog titled My first app");
                }
                else
                {
                    context.Posts.Remove(foundPost);
                    context.SaveChanges();
                    Console.WriteLine("==> Done: The post titled My first app is removed from the database");
                }
            }
        }