Доступ к объектам через DbContext с помощью PowerShell - PullRequest
0 голосов
/ 27 апреля 2019

Я бы хотел получить доступ к объектам из моей базы данных на основе Entity Framework Core через PowerShell.

Я могу загрузить DLL, которая содержит DbContext, и создать ее экземпляр.Однако при доступе к свойству для доступа к элементам в базе данных я получаю следующую ошибку:

enter image description here

Текст на этом снимке экрана выглядит следующим образом:

PS C:\temp\RedditDhtk\RedditDhtk\bin\Debug> Add-Type -Path .\RedditDhtk.dll
PS C:\temp\RedditDhtk\RedditDhtk\bin\Debug> $db = [RedditDhtkDb.RedditContext]::new()
PS C:\temp\RedditDhtk\RedditDhtk\bin\Debug> $db.Links
The following exception occurred while trying to enumerate the collection: "Could not load file or assembly
'System.ComponentModel.Annotations, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its
dependencies. The system cannot find the file specified.".
At line:1 char:1
+ $db.Links
+ ~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], ExtendedTypeSystemException
    + FullyQualifiedErrorId : ExceptionInGetEnumerator

Я пытался загрузить сборку, упомянутую в ошибке, System.ComponentModel.Annotations с Add-Path, но это не помогло.

Код C # для этого файлакоторый реализует подкласс DbContext, показан ниже на случай, если это будет полезно.

Любые предложения приветствуются!

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RedditDhtkDb
{
    public class Link
    {
        [Key]
        public string Id { get; set; }
        public string Title { get; set; }
        public string Url { get; set; }
        public string Permalink { get; set; }
        public DateTime CreatedUtc { get; set; }        
        public string Name { get; set; }
        public int Score { get; set; }
        public string Subreddit { get; set; }
        public string Author { get; set; }
        public int NumComments { get; set; }
        public string SelfText { get; set; }
        // non-reddit column
        public DateTime LastUpdated { get; set; }
        public DateTime CommentsLastUpdated { get; set; }
    }

    public class Comment
    {
        [Key]
        public string Id { get; set; }
        public string LinkId { get; set; }
        public string ParentId { get; set; }
        public string Name { get; set; }
        public DateTime CreatedUtc { get; set; }
        public bool Edited { get; set; }
        public string Author { get; set; }
        public int Score { get; set; }
        public string Body { get; set; }
        // non-reddit column
        public DateTime LastUpdated { get; set; }
    }

    [NotMapped]
   public class SpaceUsed
    {
        public string TableName { get; set; }
        public decimal TotalSpaceMB { get; set; }

        public static List<SpaceUsed> GetSpaceUsed(RedditContext db)
        {
            return db.SpaceUsed.FromSql(@"SELECT t.NAME AS TableName,
                                          CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB
                                          FROM sys.tables t
                                          INNER JOIN      
                                              sys.indexes i ON t.OBJECT_ID = i.object_id
                                          INNER JOIN 
                                              sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
                                          INNER JOIN 
                                              sys.allocation_units a ON p.partition_id = a.container_id
                                          LEFT OUTER JOIN 
                                              sys.schemas s ON t.schema_id = s.schema_id
                                          WHERE 
                                              t.NAME NOT LIKE 'dt%' 
                                              AND t.is_ms_shipped = 0
                                              AND i.OBJECT_ID > 255 
                                          GROUP BY 
                                              t.Name, s.Name, p.Rows
                                          ORDER BY 
                                              t.Name").ToList();
        }
    }

    public class RedditContext : DbContext
    {
        public DbSet<Link> Links { get; set; }
        public DbSet<Comment> Comments { get; set; }
        public DbQuery<SpaceUsed> SpaceUsed { get; set; }


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {                
            optionsBuilder.UseSqlServer(@"Server=LAPTOP-G10E2AOC\SQL2016;Database=reddit-dhtk-cs-ef-core;Integrated Security=True");
        }
    }
}

1 Ответ

0 голосов
/ 27 апреля 2019

Вы можете попробовать загрузить свои dll, используя " [System.Reflection.Assembly] :: LoadWithPartialName () "

Вы также можете попробовать указать полный путь для dll.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...