小编jac*_*ert的帖子

我应该将实体框架视为非托管资源吗?

我正在使用一个在其构造函数中使用EF引用的类.

我已经实现了IDisposable,但我不确定我是否需要析构函数,因为我不确定我可以将EF归类为非托管资源.

如果EF是托管资源,那么我不需要析构函数,所以我认为这是一个恰当的例子:

public ExampleClass : IDisposable
{
    public ExampleClass(string connectionStringName, ILogger log)
    {
        //...
        Db = new Entities(connectionStringName);
    }

    private bool _isDisposed;

    public void Dispose()
    {
        if (_isDisposed) return;

        Db.Dispose();

        _isDisposed= true;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果EF不受管理,那么我将继续这样做:

public ExampleClass : IDisposable
{
    public ExampleClass(string connectionStringName, ILogger log)
    {
        //...
        Db = new Entities(connectionStringName);
    }

    public void Dispose()
    {
        Dispose(true);
    }

    ~ExampleClass()
    {
        Dispose(false);
    }

    private bool _isDisposed;

    protected virtual void Dispose(bool disposing)
    {
        if (_isDisposed) return;

        // Dispose of …
Run Code Online (Sandbox Code Playgroud)

c# destructor entity-framework idisposable

7
推荐指数
1
解决办法
1596
查看次数

将 C# 转换的 base64 存储为 SQL Server varbinary(max)

我有一个 angular webapp,我在其中接受 base64 中的图像并将它们存储在 T-SQL varbinary 中。但是,我在 SQL-Server 中存储的现有数据似乎是不同的二进制文件。我需要两个二进制文件才能在 C# 中使用相同的读取/更新方法。

在服务中,我试图将 base64 字符串转换为 SQL Server 的 varbinary,反之亦然。

在 SSMS 中手动,我可以只使用 base64 字符串并插入到这样的行中:

Cast(@base64ImgStr as varbinary(max))
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从 C# 插入时结果是不同的:

Convert.FromBase64String(base64);
Run Code Online (Sandbox Code Playgroud)

(相同的输入)。由于二进制不同,图像不显示。我需要一个 C# 中的方法来提供与 T-SQL 中相同的二进制文件。

我必须解决这个问题,因为我可以像这样在 SQL Server 中转换并获得正确的 base64(同样,不是在 C# 中):

cast('' as xml).value('xs:base64Binary(sql:variable("@source"))', 'varchar(max)')
Run Code Online (Sandbox Code Playgroud)

我取回 Unicode 符号而不是 base64,否则我会粘贴一个示例。

我需要在不调用 SQL Server base64Binary 方法的情况下获取 base64,因为我的服务读取图像如下:

Encoding.ASCII.GetString(varbinary)
Run Code Online (Sandbox Code Playgroud)

如果我将手动插入的 varbinary (Cast(@base64ImgStr as varbinary(max))) 转换为 varchar(max),我会得到一个 base64 字符串并且图像在我的 web 应用程序中正确显示。但是,当我使用 C# 方法创建二进制文件时,情况并非如此。对于我从 Convert.FromBase64String(base64) 获得的 varbinary 类型,我需要在 SQL Server (xs:base64binary) 中进行中间转换以将二进制文件反转为 base64。在没有中间转换的情况下,我得到了 …

c# sql-server

6
推荐指数
1
解决办法
7320
查看次数