Im getting the error message "Invalid column name" FeeLevel_LevelId ", which makes no sense at all, given that all properties are simple types and there is no FeeLevel object or LevelId object in this object.
So my context is:
public partial class FeesDbContext : DisconnectedEntityContext { public DbSet<Currency> Currencies { get; set; } public DbSet<FeeLevel> FeeLevels { get; set; } public DbSet<FeeLevelDetail> FeeLevelDetails { get; set; } public DbSet<FeeType> FeeTypes { get; set; } public DbSet<MemberFeeDiscountLevel> MemberFeeDiscountLevels { get; set; } public FeesDbContext() : base("FeesDb") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new FeeLevelMap()); modelBuilder.Configurations.Add(new FeeLevelDetailMap()); modelBuilder.Configurations.Add(new FeeTypeMap()); modelBuilder.Configurations.Add(new CurrencyMap()); modelBuilder.Configurations.Add(new MemberFeeDiscountLevelMap()); } public static void ApplyChanges<TEntity>(TEntity root) where TEntity : class, IObjectWithState { using (var context = new FeesDbContext()) { context.Set<TEntity>().Add(root); foreach (var entry in context.ChangeTracker.Entries<IObjectWithState>()) { IObjectWithState stateInfo = entry.Entity; entry.State = ConvertState(stateInfo.State); } context.SaveChanges(); } } }
POCO:
public partial class MemberFeeDiscountLevel : AbstractState { public long MemberFeeDiscountLevelId { get; set; } public System.Guid MemberId { get; set; } public short MemberAsType { get; set; } public long FeeDiscountLevelId { get; set; } public System.DateTime FeeDiscountLevelAppliedDate { get; set; } public Nullable<System.DateTime> FeeDiscountLevelExpiresDate { get; set; } public Nullable<long> FallbackFeeDiscountLevelId { get; set; } public System.Guid UserId { get; set; } public System.DateTime LastModified { get; set; } public MemberFeeDiscountLevel(ObjectState state) : base(state) { } public MemberFeeDiscountLevel() { } }
This mapping is:
public class MemberFeeDiscountLevelMap : EntityTypeConfiguration<MemberFeeDiscountLevel> { public MemberFeeDiscountLevelMap() { // Primary Key this.HasKey(t => t.MemberFeeDiscountLevelId); this.Ignore(t => t.State); // Properties // Table & Column Mappings this.ToTable("MemberFeeDiscountLevel"); this.Property(t => t.MemberFeeDiscountLevelId).HasColumnName("MemberFeeDiscountLevelId"); this.Property(t => t.MemberId).HasColumnName("MemberId"); this.Property(t => t.MemberAsType).HasColumnName("MemberAsType"); this.Property(t => t.FeeDiscountLevelId).HasColumnName("FeeDiscountLevelId"); this.Property(t => t.FeeDiscountLevelAppliedDate).HasColumnName("FeeDiscountLevelAppliedDate"); this.Property(t => t.FeeDiscountLevelExpiresDate).HasColumnName("FeeDiscountLevelExpiresDate"); this.Property(t => t.FallbackFeeDiscountLevelId).HasColumnName("FallbackFeeDiscountLevelId"); this.Property(t => t.UserId).HasColumnName("UserId"); this.Property(t => t.LastModified).HasColumnName("LastModified"); } }
Database Table:

and he has no relationship. However, EF generates the following SQL:
exec sp_executesql N'INSERT [dbo].[MemberFeeDiscountLevel]([MemberId], [MemberAsType], [FeeDiscountLevelId], [FeeDiscountLevelAppliedDate], [FeeDiscountLevelExpiresDate], [FallbackFeeDiscountLevelId], [UserId], [LastModified], [FeeLevel_LevelId]) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, NULL) SELECT [MemberFeeDiscountLevelId] FROM [dbo].[MemberFeeDiscountLevel] WHERE @@ROWCOUNT > 0 AND [MemberFeeDiscountLevelId] = scope_identity()',N'@0 uniqueidentifier,@1 smallint,@2 bigint,@3 datetime2(7),@4 datetime2(7),@5 bigint,@6 uniqueidentifier,@7 datetime2(7),@8 int',@0='DAF771D1-079F-4743-B5C7-FD0FA1C63E19',@1=0,@2=1012,@3='2014-01-24 12:05:36.0608347',@4='2014-02-01 00:00:00',@5=1018,@6='EEDF2C83-2123-4B1C-BF8D-BE2D2FA26D09',@7='2014-01-24 12:05:36.0608347' go
UPDATE:
Creating a new Fees2DbContext file that removes other DbSets "fixes" the problem ... but I donβt know why ... none of these classes / sets is related to the class in question.
public partial class Fees2DbContext : DisconnectedEntityContext { public DbSet<MemberFeeDiscountLevel> MemberFeeDiscountLevels { get; set; } public Fees2DbContext() : base("FeesDb") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new MemberFeeDiscountLevelMap()); } public static void ApplyChanges<TEntity>(TEntity root) where TEntity : class, IObjectWithState { using (var context = new Fees2DbContext()) { context.Set<TEntity>().Add(root); foreach (var entry in context.ChangeTracker.Entries<IObjectWithState>()) { IObjectWithState stateInfo = entry.Entity; entry.State = ConvertState(stateInfo.State); } context.SaveChanges(); } } }
UPDATE 2:
public partial class FeeLevel : AbstractState { public FeeLevel() { this.FeeLevelDetails = new List<FeeLevelDetail>(); this.MemberFeeDiscountLevels = new List<MemberFeeDiscountLevel>(); } public long LevelId { get; set; } public string LevelName { get; set; } public int CurrencyId { get; set; } public System.DateTime LastModified { get; set; } public bool IsSystemOwned { get; set; } public System.Guid UserId { get; set; } public virtual Currency Currency { get; set; } [ScriptIgnore] public virtual ICollection<FeeLevelDetail> FeeLevelDetails { get; set; } public virtual ICollection<MemberFeeDiscountLevel> MemberFeeDiscountLevels { get; set; } } public class FeeLevelMap : EntityTypeConfiguration<FeeLevel> { public FeeLevelMap() {