using Detached.Annotations;
using Detached.Mappers.EntityFramework;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Collections.Generic;
using System.Threading.Tasks;
static async Task Main(string[] args)
Console.WriteLine("- create entity");
using (DetachedDbContext context = new DetachedDbContext())
context.Database.EnsureCreated();
context.Users.Add(new User { Id = 1, Name = "usr1" });
context.Users.Add(new User { Id = 2, Name = "usr2" });
List<UserDto> users = new List<UserDto>();
users.Add(new UserDto{ Id = 1, Name = "usr1_modified" });
users.Add(new UserDto{ Id = 2, Name = "usr2_modified" });
var entities = await context.MapAsync<User>(users);
await context.SaveChangesAsync();
using (DetachedDbContext context = new DetachedDbContext())
User persisted = await context.Users
Assert(persisted != null, "persisted not null");
Assert(persisted.Name == "usr1_modified", "user name was changed.");
Console.WriteLine("[test ended]");
static void Assert(bool condition, string label)
Console.WriteLine($"{label}: ok");
Console.WriteLine($"{label}: error!");
public class DetachedDbContext : DbContext
static SqliteConnection _connection;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
_connection = new SqliteConnection($"DataSource=file:{Guid.NewGuid()}?mode=memory&cache=shared");
optionsBuilder.UseSqlite(_connection)
public DbSet<User> Users { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual DateTime DateOfBirth { get; set; }
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual DateTime DateOfBirth { get; set; }