C # Xamarin: SQLite table from Mappings classes (EntityTypeConfigurationClass)

0

I'm trying to create some tables in sqlite with VS Community 2017 (c # and xamarin android) from classes that are defined by EntityTypeConfiguration . Below I try to better detail my difficulty. Thanks in advance for any help.

** Commom properties
using System;
namespace Agenda.Domain.Common
{
    public class CommonProperties
    {
        public DateTime? Datalt { get; set; }
    }
}

*-*-*-*-*-*-*-*-*-*-*-   

** Classe Anêmica **
using Agenda.Domain.Common;
using System;
namespace Agenda.Domain
{
    public class User_Mobile : CommonProperties
    {
        public decimal Pk { get; set; }
        public string id { get; set; }
        public string ativo { get; set; }
        public string Senha { get; set; }
    }
}

*-*-*-*-*-*-*-*-*-*-*-
** Mapeamento da Classe User_Mobile **
using Agenda.Domain;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
namespace Agenda.Infra.Mappings
{
    public class User_MobileMap : EntityTypeConfiguration
    {
        public User_MobileMap()
        {
            ToTable("user_mobile"); // Tabela no banco de Dados SQLServer (WebAPI) no WebApi funciona corretamente.
            HasKey(x => x.Pk);
            Property(x => x.Pk).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            Property(x => x.id).HasMaxLength(100).IsRequired();
            Property(x => x.ativo).HasMaxLength(1).IsRequired();
            Property(x => x.Senha).HasMaxLength(50).IsRequired();
        }
    }
}

*-*-*-*-*-*-*-*-*-*-*-
** Classe DBRepositório **
using Android.Util;
using SQLite;
using Agenda.Infra.Mappings;
using System;
using System.IO;
namespace Agenda.ManMob.DataBase
{
    public class DBRepositorio
    {
        // Cria a base de dados caso não exista.
        string sPath = "";
        public DBRepositorio()
        {
            sPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "DBSTN.db3");
        }
        public bool CreateTable()
        {
            try
            {
                using (var conn = new SQLiteConnection(sPath))
                {
                    conn.CreateTable();  ==>> Aqui está o problema.
                                        // no acompanhamento do processo (DEBUG) o nome da tabela passada para o conn.CreateTable é o nome da classe mapping (User_MobileMap) quando deveria ser o nome apontado em ToTable("user_mobile").
                                        // Como o nome difere da classe anêmica que conhece o banco de dados SQLServer me retorna um erro de que nenhuma coluna foi encontrada para criar a tabela.
                                        // Se puder me auxiliar neste ponto, ficarei muito grato.
                                        // Mensagem Original: "Cannot create a table with zero columns (does 'Agenda.Infra.Mappings.User_MobileMap' have public properties?)"
                    return true;
                }
            }
            catch (SQLiteException SQLError)
            {
                Log.Info("SQLite Ex.", SQLError.Message);
                return false;
            }
        }
        public bool CreateDB()
        {
            try
            {
                using (var conn = new SQLiteConnection(sPath))
                {
                }
                return true;
            }
            catch (Exception SQLError)
            {
                Log.Info("SQLite Ex.", SQLError.Message);
                return false;
            }
        }
    }
}

*-*-*-*-*-*-*-*-*-*-*-
** Button com a chamanda a classe DBRepositorio **
 try
 {
  DBRepositorio repo = new DBRepositorio();
    if (repo.CreateDB())
    {
        repo.CreateTable();
        Toast.MakeText(this, "Tabela criada", ToastLength.Long).Show();
    }
 }
 catch (Exception Error)
 {
   Toast.MakeText(this, Error.Message, ToastLength.Long).Show();
 }    

Att.,
Alexandre
    
asked by anonymous 17.03.2018 / 10:57

0 answers