Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用基于对象的EF插入不同的表';s型?_C#_Entity Framework_Ef Code First - Fatal编程技术网

C# 如何使用基于对象的EF插入不同的表';s型?

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

我有一段代码,它使用EF将记录插入数据库。我想使用相同的代码插入5个不同的表。唯一的区别是表名和单个列名。如何构造代码块,以便根据对象类型插入到正确的表中

当前代码块:

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)映射是您的解决方案,我的回答解决了问题吗?