示例#1
0
        static void Main(string[] args)
        {
            using (var db = new LivrosContext())
            {
                db.Database.EnsureDeleted();
                db.Database.EnsureCreated();

                db.Database.ExecuteSqlCommand(
                    @"CREATE FUNCTION [dbo].[ExemplaresDisponiveis] (@livroId INT) RETURNS INT 
                      AS
                      BEGIN
                        DECLARE @count AS INT
                        SET @count = (SELECT QtdExemplares 
                                        FROM Livros 
                                        WHERE LivroId = @livroId)-(SELECT COUNT(*) 
                                                                    FROM LivroEmprestimo 
                                                                    WHERE LivroId = @livroId 
                                                                        AND DataDevolucao IS NULL)
                        RETURN @count
                      END"
                    );

                db.Livros.Add(
                    new Livro
                {
                    Titulo        = "Domain-Driven Design: Tackling Complexity in the Heart of Software",
                    Autor         = "Eric Evans",
                    AnoPublicacao = 2003,
                    QtdExemplares = 5,
                    Emprestimos   = new List <LivroEmprestimo>()
                    {
                        new LivroEmprestimo()
                        {
                            NomeAluno           = "José da Silva",
                            DataEmprestimo      = DateTime.Parse("01/11/2017"),
                            DataLimiteDevolucao = DateTime.Parse("07/11/2017"),
                        },
                        new LivroEmprestimo()
                        {
                            NomeAluno           = "Alexandre Alves",
                            DataEmprestimo      = DateTime.Parse("03/11/2017"),
                            DataLimiteDevolucao = DateTime.Parse("10/11/2017"),
                        }
                    }
                });

                db.Livros.Add(
                    new Livro
                {
                    Titulo        = "Agile Principles, Patterns, and Practices in C#",
                    Autor         = "Robert C. Martin",
                    AnoPublicacao = 2006,
                    QtdExemplares = 2,
                    Emprestimos   = new List <LivroEmprestimo>()
                    {
                        new LivroEmprestimo()
                        {
                            NomeAluno           = "Marcos Ribeiro",
                            DataEmprestimo      = DateTime.Parse("02/11/2017"),
                            DataLimiteDevolucao = DateTime.Parse("08/11/2017"),
                        },
                        new LivroEmprestimo()
                        {
                            NomeAluno           = "Fernando Lopes",
                            DataEmprestimo      = DateTime.Parse("03/11/2017"),
                            DataLimiteDevolucao = DateTime.Parse("10/11/2017"),
                        }
                    }
                });


                db.SaveChanges();

                Console.WriteLine("------------ RESULTADOS ------------");
                var query =
                    from p in db.Livros
                    select new
                {
                    Titulo = p.Titulo,
                    ExemplaresDisponiveis = LivrosContext.ExemplaresDisponiveis(p.LivroId)
                };

                query.ToList().ForEach(x => {
                    Console.WriteLine("Título: " + x.Titulo);
                    Console.WriteLine("Exemplares disponíveis: " + x.ExemplaresDisponiveis);
                });
                System.Console.WriteLine();
                Console.WriteLine("------------ RESULTADOS (Apenas disponíveis) ------------");
                var query2 =
                    from p in db.Livros
                    where LivrosContext.ExemplaresDisponiveis(p.LivroId) > 0
                    select p;

                query2.ToList().ForEach(x => {
                    Console.WriteLine("Título: " + x.Titulo);
                });
                Console.ReadKey();
            }
        }