0
I’m trying to create some tables on sqlite with VS Community 2017 (c# and Xamarin android) from classes that are defined by Entitytypeconfiguration. Below I try to better detail my difficulty. I already appreciate 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
What’s the matter?
– novic
Good morning Virgil, thanks for the return. I put in bold the point where the problem occurs and what the problem is. Thanks for your attention.
– Alexandre Macedo
Virgil, I could not put the correct text in bold. As it is an EF reference, I believe it was read as some HTML tag of the site. So the bold section should be considered as: </br> Conn.Createtable<User_mobilemap>();</br>Thanks!
– Alexandre Macedo