diff --git a/src/Database/Models/MetadataExtractionModel.cs b/src/Database/Models/MetadataExtractionModel.cs
new file mode 100644
index 0000000000000000000000000000000000000000..fe5215b14b470b529e1f5ab8101650178a8bc761
--- /dev/null
+++ b/src/Database/Models/MetadataExtractionModel.cs
@@ -0,0 +1,25 @@
+using Coscine.Database.DataModel;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Linq.Expressions;
+
+namespace Coscine.Database.Models
+{
+    public class MetadataExtractionModel : DatabaseModel<MetadataExtraction>
+    {
+        public override Expression<Func<MetadataExtraction, Guid>> GetIdFromObject()
+        {
+            return (metadataExtractionEntry) => metadataExtractionEntry.Id;
+        }
+
+        public override DbSet<MetadataExtraction> GetITableFromDatabase(CoscineDB db)
+        {
+            return db.MetadataExtractions;
+        }
+
+        public override void SetObjectId(MetadataExtraction databaseObject, Guid id)
+        {
+            databaseObject.Id = id;
+        }
+    }
+}
diff --git a/src/Database/Models/MetadataModel.cs b/src/Database/Models/MetadataModel.cs
index 76d854e843c4617341eac7a9d2746292dc5a8520..2b9c8cf33b6dcf1bbde1dd41bad6fd15177729bb 100644
--- a/src/Database/Models/MetadataModel.cs
+++ b/src/Database/Models/MetadataModel.cs
@@ -6,6 +6,7 @@ using System.Web;
 
 namespace Coscine.Database.Models
 {
+    [Obsolete("This should not be used")]
     public class MetadataModel : DatabaseModel<Resource>
     {
 
@@ -24,6 +25,7 @@ namespace Coscine.Database.Models
             throw new NotImplementedException();
         }
 
+        [Obsolete("This should not be used")]
         public Resource StoreFromObject(ResourceObject resourceObject)
         {
             Resource resource = new Resource()
@@ -42,6 +44,7 @@ namespace Coscine.Database.Models
             return resource;
         }
 
+        [Obsolete("This should not be used")]
         public string GenerateId(string resourceId, string filename)
         {
             // Double UrlEncode since converting it to Uri executes one UrlDecode and Virtuoso
@@ -50,6 +53,7 @@ namespace Coscine.Database.Models
             return $"https://purl.org/coscine/md/{resourceId}/{encodedFileName}/";
         }
 
+        [Obsolete("This should not be used")]
         public Uri CreateUri(string graphName)
         {
             return new Uri(graphName);
diff --git a/src/Scaffolding/DataModel/MetadataExtraction.cs b/src/Scaffolding/DataModel/MetadataExtraction.cs
new file mode 100644
index 0000000000000000000000000000000000000000..381f5425256fb6b7d2381079d1f6f58bd545d823
--- /dev/null
+++ b/src/Scaffolding/DataModel/MetadataExtraction.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+// Code scaffolded by EF Core assumes nullable reference types (NRTs) are not used or disabled.
+// If you have enabled NRTs for your project, then un-comment the following line:
+// #nullable disable
+
+namespace Coscine.Database.DataModel
+{
+    public partial class MetadataExtraction
+    {
+        public Guid Id { get; set; }
+        public Guid ResourceId { get; set; }
+        public bool Activated { get; set; }
+
+        public virtual Resource Resource { get; set; }
+    }
+}
diff --git a/src/Scaffolding/DataModel/Model.cs b/src/Scaffolding/DataModel/Model.cs
index 6655bbe50d8a16d62b227eff0090baffe5cd9439..e0729fd1fd3ab5d2386ae9a04911418a0536cbb5 100644
--- a/src/Scaffolding/DataModel/Model.cs
+++ b/src/Scaffolding/DataModel/Model.cs
@@ -35,6 +35,7 @@ namespace Coscine.Database.DataModel
         public virtual DbSet<License> Licenses { get; set; }
         public virtual DbSet<LinkedResourceType> LinkedResourceTypes { get; set; }
         public virtual DbSet<Log> Logs { get; set; }
+        public virtual DbSet<MetadataExtraction> MetadataExtractions { get; set; }
         public virtual DbSet<Project> Projects { get; set; }
         public virtual DbSet<ProjectDiscipline> ProjectDisciplines { get; set; }
         public virtual DbSet<ProjectInstitute> ProjectInstitutes { get; set; }
@@ -367,6 +368,18 @@ namespace Coscine.Database.DataModel
                     .HasMaxLength(500);
             });
 
+            modelBuilder.Entity<MetadataExtraction>(entity =>
+            {
+                entity.ToTable("MetadataExtraction");
+
+                entity.Property(e => e.Id).HasDefaultValueSql("(newid())");
+
+                entity.HasOne(d => d.Resource)
+                    .WithMany(p => p.MetadataExtractions)
+                    .HasForeignKey(d => d.ResourceId)
+                    .HasConstraintName("FK_MetadataExtraction_ResourceId_Resources_Id");
+            });
+
             modelBuilder.Entity<Project>(entity =>
             {
                 entity.Property(e => e.Id).HasDefaultValueSql("(newid())");
diff --git a/src/Scaffolding/DataModel/Resource.cs b/src/Scaffolding/DataModel/Resource.cs
index 69cb6f23186d57d6de911e088baaba84bf5e9ac4..9fc62ec0c9c59f49885f08b028d83802ce6e2549 100644
--- a/src/Scaffolding/DataModel/Resource.cs
+++ b/src/Scaffolding/DataModel/Resource.cs
@@ -11,6 +11,7 @@ namespace Coscine.Database.DataModel
     {
         public Resource()
         {
+            MetadataExtractions = new HashSet<MetadataExtraction>();
             ProjectResources = new HashSet<ProjectResource>();
             ResourceDisciplines = new HashSet<ResourceDiscipline>();
         }
@@ -35,6 +36,7 @@ namespace Coscine.Database.DataModel
         public virtual License License { get; set; }
         public virtual ResourceType Type { get; set; }
         public virtual Visibility Visibility { get; set; }
+        public virtual ICollection<MetadataExtraction> MetadataExtractions { get; set; }
         public virtual ICollection<ProjectResource> ProjectResources { get; set; }
         public virtual ICollection<ResourceDiscipline> ResourceDisciplines { get; set; }
     }