AndroidとWindowsでローカルデータベース構築を比較

投稿者: | 2020年11月21日

現在の仕事は、Android版アプリのソースコードを読みながらWindows版アプリの開発を行っています。メンテナンスの都合上、Androidのコードに似せて欲しいとの要望だったので、可能な限りAndroidらしいコードで開発。チマチマ、仕事で得た知見を記事にしていきます。

それぞれのOS主要のフレームワークは下記の通り
Android・・・Room
Winodws・・Entity Framework Core

Entityクラス

Kotlinコード

@Entity(tableName = "members")
data class MemberDto(
    @PrimaryKey
    @ColumnInfo(name = "member_id")
    val id : Int = 0,
    val name : String = "",
)

C#コード

[Table("members")]
public class MemberEntity
{
    [Column("member_id")]
    [Key]
    public int id {get; protected set;}

    public string name {get; protected set;}

    protected MemberEntity(int id, string name)
    {
        this.id = id;
        this.name = name;
    }
)

DataBaseクラス

kotlinコード

@Database{
    entities = [
        MemberDto::class
    ],
    exportSchema = false
}

abstract class SampleDatebase : RoomDatabase()
{
    abstract fun memberDto() : MemberDao
}

C#コード

public class GNDoohDbContext
{
    public DbSet<MemberEntity> Members {get; set;}

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){
        optionsBuilder.UseSqlite("Data Source=sample.db");
        optionsBuilder.UserLazyLoadingProxies();
        base.OnConfiguring(optionsBuilder);
    }
}

Data Access Objectsクラス

kotlinコード

@Dao
interface MemberDao{
    @Query("SELETE * FROM members")
    fun getAll(): List<ScheduleDto>

    @Query("DELETE FROM sqlite_sequence WHERE name = 'members'")
    fun resetIncrement(): Int
}

C#コード

FromSqlRawとExexuteSqlInterpolatedAsyncメソッドを使えば、Android側で実装済みのコードを再利用できるはず。

public class MemberDao
{
    private readonly SampleDbContent _content;

    public CreativeDto(SampleDbContent content)
    {
        _content = content;
    }

    public async Task<IReadOnlyList<MemberEntity>> GetAll()
    {
        return await context.Database.FromSqlRaw("SELECT * FROM dbo.members").ToListAsync();
    }

    public async Task<int> ResetIncrement()
    {
        return await _content.Database.ExexuteSqlInterpolatedAsync($"DELETE FROM sqlite_sequence WHERE name = 'members'");
    }
}

参考文献

[Room](https://developer.android.com/training/data-storage/room?hl=ja)
[Entity Framework Core](https://docs.microsoft.com/ja-jp/ef/core/modeling/entity-properties?tabs=data-annotations)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)