2

I need to store an image in my PostgreSQL database, which I have written with Entity Framework 6's Code First, and mapped it via Npgsql.

Other questions asked on the topic suggests a byte[]. However, PostgreSQL cannot use byte[]. It can however use a type called bytea, which is a byte array. But how do I get this type in C#?

Edit:

I made an assumption, that it was the byte[] which could not be created. I did a Update-Database -verbose and it gave me the following:

PM> Update-Database -verbose
Using StartUp project 'Core.Shell'.
Using NuGet project 'Core.Database'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'TrackerDB' (DataSource: tcp://localhost:5432, Provider: Npgsql, Origin: Configuration).
Applying explicit migrations: [201604130907499_initial].
Applying explicit migration: 201604130907499_initial.
CREATE TABLE "public"."EmployeePhotoes"("EmployeePhotoId" int4 NOT NULL DEFAULT 0,"Image" bytea,"EmployeeId" int4 NOT NULL DEFAULT 0,CONSTRAINT "PK_public.EmployeePhotoes" PRIMARY KEY ("EmployeePhotoId"))
CREATE INDEX "EmployeePhotoes_IX_EmployeePhotoId" ON "public"."EmployeePhotoes" ("EmployeePhotoId")
ALTER TABLE "public"."EmployeePhotoes" ADD CONSTRAINT "FK_public.EmployeePhotoes_public.Employees_EmployeePhotoId" FOREIGN KEY ("EmployeePhotoId") REFERENCES "public"."Employees" ("EmployeeId")
ALTER TABLE "dbo"."__MigrationHistory" SET SCHEMA public
System.Runtime.Serialization.SerializationException: Type is not resolved for member 'Npgsql.NpgsqlException,Npgsql, Version=3.0.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7'.
    at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
    at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
    at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
    at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
    at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Type is not resolved for member 'Npgsql.NpgsqlException,Npgsql, Version=3.0.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7'.

The class I am trying to add:

public class EmployeePhoto
{
    //Primary key
    public int EmployeePhotoId { get; set; }

    public byte[] Image { get; set; }  

    //Foreign key
    public int EmployeeId { get; set; }

    //Navigation property
    public Employee Employee { get; set; } //1 photo for 1 Employee
}

I am not entirely sure what type is not resolved by Npgsql

Community
  • 1
  • 1
Rasmus Bækgaard
  • 737
  • 2
  • 11
  • 27

1 Answers1

0

Turns out this happens because Npgsql is not installed in the GAC.

This issue was solved by installing the latest version of Npgsql.

Rasmus Bækgaard
  • 737
  • 2
  • 11
  • 27