Я бы хотел получить доступ к объектам из моей базы данных на основе Entity Framework Core через PowerShell.
Я могу загрузить DLL, которая содержит DbContext
, и создать ее экземпляр.Однако при доступе к свойству для доступа к элементам в базе данных я получаю следующую ошибку:
![enter image description here](https://i.stack.imgur.com/6cvh9.png)
Текст на этом снимке экрана выглядит следующим образом:
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");
}
}
}