I have two tables
- StoreOrderItem
- StoreOrder
Now StoreOrder has many StoreOrderItems and StoreOrderItem has one StoreOrder (simple 1 to many relationship)
public class StoreOrderItemMap : EntityTypeConfiguration<StoreOrderItem>
{
public StoreOrderItemMap()
{
this.ToTable("StoreOrderItem");
this.HasKey(op => op.Id);
this.Property(op => op.StoreOrderId).HasColumnName("order_id");
...
this.HasRequired(so => so.StoreOrder)
.WithMany(soi => soi.StoreOrderItems)
.HasForeignKey(so => so.StoreOrderId);
}
}
public class StoreOrderMap : EntityTypeConfiguration<StoreOrder>
{
public StoreOrderMap()
{
this.ToTable("StoreOrder");
this.HasKey(op => op.Id);
....
}
}
public class StoreOrderItem
{
....
public virtual int StoreOrderId { get; set; }
....
public virtual StoreOrder StoreOrder { get; set; }
}
public class StoreOrder
{
....
private ICollection<StoreOrderItem> _storeOrderItems;
....
public virtual ICollection<StoreOrderItem> StoreOrderItems
{
get { return _storeOrderItems ?? (_storeOrderItems = new List<StoreOrderItem>()); }
set { _storeOrderItems = value; }
}
}
//The code which is used to add the configurations to the modelBuilder.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
System.Type configType = typeof(ContentMap); //any of your configuration classes here
var typesToRegister = Assembly.GetAssembly(configType).GetTypes()
.Where(type => !String.IsNullOrEmpty(type.Namespace))
.Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>));
foreach (var type in typesToRegister)
{
dynamic configurationInstance = Activator.CreateInstance(type);
modelBuilder.Configurations.Add(configurationInstance);
}
base.OnModelCreating(modelBuilder);
}
Note I am running this code on an existing DB, how do I tell EF to not select “StoreOrder_Id” and to instead use the existing column “order_id”?
Here is the error:
Server Error in ‘/’ Application.
Invalid column name ‘StoreOrder_Id’.
Description: An unhandled exception occurred during the execution of
the current web request. Please review the stack trace for more
information about the error and where it originated in the code.Exception Details: System.Data.SqlClient.SqlException: Invalid column
name ‘StoreOrder_Id’.
Found the problem after a few days of mind bending ……
There was another property in the StoreOrder class
This was being evaluated too early and causing all sorts of chaos, changed to
And it worked immediately!!