Reputation: 137
i'm having some more problems with entity framework. one of them was resolved here entity framework multiple tables same name
now when i try to insert into either table bo or table bi i get the following error:
{"Invalid column name 'Bo_obrano'.\r\nInvalid column name 'Bo_boano'.\r\nInvalid column name 'Bo_ndos'."}
or
{"Invalid column name 'Bi_bistamp'}
as i reverse engineered the database through the use of power tools i now have my mapping for bo like this:
public boMap()
{
// Primary Key
HasKey(t => new { t.obrano, t.boano, t.ndos });
Property(t => t.obrano)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(t => t.boano)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(t => t.ndos)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
and bi mapping like this:
public BiMap()
{
// Primary Key
HasKey(t => t.bistamp);
....
my context class looks like this:
public class PHCDbContext:DbContext
{
//classes mapeadas via reverse
public DbSet<Bi> DadosLinhasEncomendas { get; set; }
public DbSet<Bo> DadosCabecalhosEncomendas { get; set; }
...
public PHCDbContext(string connection):base(connection)
{
Database.SetInitializer<PHCDbContext>(null);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new BiMap());
modelBuilder.Configurations.Add(new boMap());
....
i exported the mapping as instructed in here: export code first model mapping
what i've found is that those fields do not exist per se. as i opened the edmx file in visual studio i found out that those fields are in the navigational property of the class, in the associations part of the model. they represent the primary keys in the tables, not foreign keys. but they are not mapped to any value in the poco class. much less to any column in the database. so how can i solve this? help would be apreciated thanks in advance
Upvotes: 0
Views: 5121
Reputation: 137
i got it to work by removing the navigational property. as there's no correlation between the tables whatsoever. both of them are isolated so far. thanks for the help once again
Upvotes: 1
Reputation: 7605
Your situation looks slightly unusual, but you need to look at your database and see what the column name is, then map it within the context:
protected override void OnModelCreating( DbModelBuilder modelBuilder )
{
modelBuilder.Entity<Bi>( ).ToTable( "dbo.Bi" );
modelBuilder.Entity<Bi>( ).Property( p => p.bistamp).HasColumnName("actualName" );
}
Upvotes: 0