Sto utilizzando Entity Framework 5 - Codice prima.Come mappare la colonna e l'entità appropriata di diversi tipi di dati nel codice del framework di entità prima
Ho un database a cui mi sto collegando che esiste già da un po 'di tempo (non l'ho creato). C'è un tavolo chiamato T_Customers
. Contiene un elenco di tutti i clienti. Essa ha la seguente struttura (solo parzialmente illustrato):
Customer_id | numeric (5, 0) | auto increment | not null (not set as primary key)
FName | varchar(50) | not null
LName | varchar(50) | not null
mio Customer
classe:
public class Customer : IEntity
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
mio IEntity
interfaccia:
public interface IEntity
{
int Id { get; set; }
}
Ho il seguente nella mia classe contesto di database:
public class DatabaseContext : DbContext
{
public DatabaseContext(string connectionString)
: base(connectionString)
{
}
public DbSet<Customer> Customers { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new CustomerConfiguration());
}
public new DbSet<TEntity> Set<TEntity>()
where TEntity : class, IEntity
{
return base.Set<TEntity>();
}
}
La mia classe di configurazione del cliente:
class CustomerConfiguration : EntityTypeConfiguration<Customer>
{
internal CustomerConfiguration()
{
this.ToTable("T_Customers");
this.Property(x => x.Id).HasColumnName("Customer_id");
this.Property(x => x.FirstName).HasColumnName("FName");
this.Property(x => x.LastName).HasColumnName("LName");
}
}
Sto cercando di essere coerente nelle mie dichiarazioni di entità, ho bisogno di tutti gli ID di essere interi. Questo ID cliente è di tipo numerico nel database e ora sto riscontrando problemi quando tento di restituire un elenco di tutti i clienti. Come faccio a mappare da un tipo numerico di database a un tipo intero C#? Non sto cambiando l'ID della mia classe a valori nulli o decimali, i miei ID sono sempre non annullabili e interi. Inoltre non posso modificare il database.
L'errore che sto ottenendo è:
The 'Id' property on 'Customer' could not be set to a 'Decimal' value.
You must set this property to a non-null value of type 'Int32'.
Grazie. Cosa succede se ho bisogno di una precisione diversa che 18, 0? È meglio attenersi alla precisione di 5,0? –
@BrendanVogt bene, hai detto che hai già un database esistente, quindi il tuo '5.0' di precisione rimarrà. Se genererai un nuovo database dal codice, questa colonna avrà la precisione '18,0'. Quindi, se hai già precisione '5,0', non devi modificare nulla. Il numero intero BTW potrebbe avere un valore superiore a 99999, quindi è importante. –
Grazie! Mi ha cambiato la giornata in positivo. – tuseau