C# 如何使用基于对象的EF插入不同的表';s型?
我有一段代码,它使用EF将记录插入数据库。我想使用相同的代码插入5个不同的表。唯一的区别是表名和单个列名。如何构造代码块,以便根据对象类型插入到正确的表中 当前代码块:C# 如何使用基于对象的EF插入不同的表';s型?,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我有一段代码,它使用EF将记录插入数据库。我想使用相同的代码插入5个不同的表。唯一的区别是表名和单个列名。如何构造代码块,以便根据对象类型插入到正确的表中 当前代码块: if (entity is Fruit) { FruitLink link = new FruitLink() { FruitLinkId = // some number, // Other properties } context.FruitLinks.Add(li
if (entity is Fruit)
{
FruitLink link = new FruitLink()
{
FruitLinkId = // some number,
// Other properties
}
context.FruitLinks.Add(link);
context.SaveChanges();
}
我的目标不是为我要插入的每种不同类型使用
if(entity is Fruit)
语句。唯一会根据实体类型而改变的是表名(即FroothLink)和主键名(即FroothLinkId)。通用存储库:
public class EFRepository<T> where T : class
{
private DbContext _context;
public EFRepository(DbContext context)
{
this._context = context;
}
public void Insert(T entity)
{
this._context.Entry<T>(entity).State = EntityState.Added;
}
public bool Commit()
{
return this._context.SaveChanges() > 0;
}
}
public class BaseEntity
{
public string BaseEntityProp1 { get; set; }
public string BaseEntityProp2 { get; set; }
}
public class Entity1 : BaseEntity
{
public int Entity1ID { get; set; }
}
public class Entity2 : BaseEntity
{
public int Entity2ID { get; set; }
}
public class Entity1Map : EntityTypeConfiguration<Entity1>
{
public Entity1Map()
{
this.HasKey(e => e.Entity1ID);
this.Property(e => e.Entity1ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Map(m =>
{
m.ToTable("Entity1");
m.MapInheritedProperties();
});
}
}
public class Entity2Map : EntityTypeConfiguration<Entity2>
{
public Entity2Map()
{
this.HasKey(e => e.Entity2ID);
this.Property(e=> e.Entity2ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Map(m =>
{
m.ToTable("Entity2");
m.MapInheritedProperties();
});
}
}
public class MyContext : DbContext
{
public MyContext()
{
}
public DbSet<Entity1> Entities1{ get; set; }
public DbSet<Entity2> Entities2 { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new Entity1Map());
modelBuilder.Configurations.Add(new Entity2Map());
base.OnModelCreating(modelBuilder);
}
}
EFRepository<BaseEntity> baseRepository = new EFRepository<BaseEntity>(new MyContext ());
List<BaseEntity> entities = new List<BaseEntity>()
{
new Entity1()
{
BaseEntityProp1 = "Entity1Prop1",
BaseEntityProp2 = "Entity1Prop2",
},
new Entity2()
{
BaseEntityProp1 = "Entity2Prop1",
BaseEntityProp2 = "Entity2Prop2",
}
};
foreach (var entity in entities)
{
baseRepository.Insert(entity);
baseRepository.Commit();
}
每混凝土表(TPC)映射:
public class EFRepository<T> where T : class
{
private DbContext _context;
public EFRepository(DbContext context)
{
this._context = context;
}
public void Insert(T entity)
{
this._context.Entry<T>(entity).State = EntityState.Added;
}
public bool Commit()
{
return this._context.SaveChanges() > 0;
}
}
public class BaseEntity
{
public string BaseEntityProp1 { get; set; }
public string BaseEntityProp2 { get; set; }
}
public class Entity1 : BaseEntity
{
public int Entity1ID { get; set; }
}
public class Entity2 : BaseEntity
{
public int Entity2ID { get; set; }
}
public class Entity1Map : EntityTypeConfiguration<Entity1>
{
public Entity1Map()
{
this.HasKey(e => e.Entity1ID);
this.Property(e => e.Entity1ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Map(m =>
{
m.ToTable("Entity1");
m.MapInheritedProperties();
});
}
}
public class Entity2Map : EntityTypeConfiguration<Entity2>
{
public Entity2Map()
{
this.HasKey(e => e.Entity2ID);
this.Property(e=> e.Entity2ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Map(m =>
{
m.ToTable("Entity2");
m.MapInheritedProperties();
});
}
}
public class MyContext : DbContext
{
public MyContext()
{
}
public DbSet<Entity1> Entities1{ get; set; }
public DbSet<Entity2> Entities2 { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new Entity1Map());
modelBuilder.Configurations.Add(new Entity2Map());
base.OnModelCreating(modelBuilder);
}
}
EFRepository<BaseEntity> baseRepository = new EFRepository<BaseEntity>(new MyContext ());
List<BaseEntity> entities = new List<BaseEntity>()
{
new Entity1()
{
BaseEntityProp1 = "Entity1Prop1",
BaseEntityProp2 = "Entity1Prop2",
},
new Entity2()
{
BaseEntityProp1 = "Entity2Prop1",
BaseEntityProp2 = "Entity2Prop2",
}
};
foreach (var entity in entities)
{
baseRepository.Insert(entity);
baseRepository.Commit();
}
公共类Entity1Map:EntityTypeConfiguration
{
公共实体1Map()
{
this.HasKey(e=>e.Entity1ID);
this.Property(e=>e.Entity1ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
这个.Map(m=>
{
m、 可转让(“实体1”);
m、 MapInheritedProperties();
});
}
}
公共类Entity2Map:EntityTypeConfiguration
{
公共实体2map()
{
this.HasKey(e=>e.Entity2ID);
this.Property(e=>e.Entity2ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
这个.Map(m=>
{
m、 ToTable(“实体2”);
m、 MapInheritedProperties();
});
}
}
上下文:
public class EFRepository<T> where T : class
{
private DbContext _context;
public EFRepository(DbContext context)
{
this._context = context;
}
public void Insert(T entity)
{
this._context.Entry<T>(entity).State = EntityState.Added;
}
public bool Commit()
{
return this._context.SaveChanges() > 0;
}
}
public class BaseEntity
{
public string BaseEntityProp1 { get; set; }
public string BaseEntityProp2 { get; set; }
}
public class Entity1 : BaseEntity
{
public int Entity1ID { get; set; }
}
public class Entity2 : BaseEntity
{
public int Entity2ID { get; set; }
}
public class Entity1Map : EntityTypeConfiguration<Entity1>
{
public Entity1Map()
{
this.HasKey(e => e.Entity1ID);
this.Property(e => e.Entity1ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Map(m =>
{
m.ToTable("Entity1");
m.MapInheritedProperties();
});
}
}
public class Entity2Map : EntityTypeConfiguration<Entity2>
{
public Entity2Map()
{
this.HasKey(e => e.Entity2ID);
this.Property(e=> e.Entity2ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Map(m =>
{
m.ToTable("Entity2");
m.MapInheritedProperties();
});
}
}
public class MyContext : DbContext
{
public MyContext()
{
}
public DbSet<Entity1> Entities1{ get; set; }
public DbSet<Entity2> Entities2 { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new Entity1Map());
modelBuilder.Configurations.Add(new Entity2Map());
base.OnModelCreating(modelBuilder);
}
}
EFRepository<BaseEntity> baseRepository = new EFRepository<BaseEntity>(new MyContext ());
List<BaseEntity> entities = new List<BaseEntity>()
{
new Entity1()
{
BaseEntityProp1 = "Entity1Prop1",
BaseEntityProp2 = "Entity1Prop2",
},
new Entity2()
{
BaseEntityProp1 = "Entity2Prop1",
BaseEntityProp2 = "Entity2Prop2",
}
};
foreach (var entity in entities)
{
baseRepository.Insert(entity);
baseRepository.Commit();
}
公共类MyContext:DbContext
{
公共MyContext()
{
}
公共数据库集实体1{get;set;}
公共数据库集实体2{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
添加(新Entity1Map());
modelBuilder.Configurations.Add(newentity2map());
基于模型创建(modelBuilder);
}
}
样本数据:
public class EFRepository<T> where T : class
{
private DbContext _context;
public EFRepository(DbContext context)
{
this._context = context;
}
public void Insert(T entity)
{
this._context.Entry<T>(entity).State = EntityState.Added;
}
public bool Commit()
{
return this._context.SaveChanges() > 0;
}
}
public class BaseEntity
{
public string BaseEntityProp1 { get; set; }
public string BaseEntityProp2 { get; set; }
}
public class Entity1 : BaseEntity
{
public int Entity1ID { get; set; }
}
public class Entity2 : BaseEntity
{
public int Entity2ID { get; set; }
}
public class Entity1Map : EntityTypeConfiguration<Entity1>
{
public Entity1Map()
{
this.HasKey(e => e.Entity1ID);
this.Property(e => e.Entity1ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Map(m =>
{
m.ToTable("Entity1");
m.MapInheritedProperties();
});
}
}
public class Entity2Map : EntityTypeConfiguration<Entity2>
{
public Entity2Map()
{
this.HasKey(e => e.Entity2ID);
this.Property(e=> e.Entity2ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Map(m =>
{
m.ToTable("Entity2");
m.MapInheritedProperties();
});
}
}
public class MyContext : DbContext
{
public MyContext()
{
}
public DbSet<Entity1> Entities1{ get; set; }
public DbSet<Entity2> Entities2 { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new Entity1Map());
modelBuilder.Configurations.Add(new Entity2Map());
base.OnModelCreating(modelBuilder);
}
}
EFRepository<BaseEntity> baseRepository = new EFRepository<BaseEntity>(new MyContext ());
List<BaseEntity> entities = new List<BaseEntity>()
{
new Entity1()
{
BaseEntityProp1 = "Entity1Prop1",
BaseEntityProp2 = "Entity1Prop2",
},
new Entity2()
{
BaseEntityProp1 = "Entity2Prop1",
BaseEntityProp2 = "Entity2Prop2",
}
};
foreach (var entity in entities)
{
baseRepository.Insert(entity);
baseRepository.Commit();
}
EFRepository baseRepository=newefrepository(newmycontext());
列表实体=新列表()
{
新实体1()
{
BaseEntityProp1=“Entity1Prop1”,
BaseEntityProp2=“Entity1Prop2”,
},
新实体2()
{
BaseEntityProp1=“Entity2Prop1”,
BaseEntityProp2=“Entity2Prop2”,
}
};
foreach(实体中的var实体)
{
baseRepository.Insert(实体);
提交();
}
您可能需要研究“具有实体框架的通用存储库模式”。每个具体表(TPC)映射是您的解决方案,我的回答解决了问题吗?