У меня есть контекст, который содержит много DbSets. Некоторые из этих DbSets реализуют интерфейс IActivity, который содержит ряд общих полей, таких как TimeReceived, TimeSent.Невозможно неявно преобразовать тип DbSet
В моем контроллере мне нужно прочитать значения из одного из контекстных DbSets, но я не знаю, какой из них до выполнения. Таким образом, я создал следующий FactoryClass:
public static class ActivityFactory
{
public static DbSet<IActivity> GetDbSet(BAMContext context, BizTalkApplicationEnum previousApplication)
{
switch (previousApplication)
{
case BizTalkApplicationEnum.Erp:
return context.ErpRecs;
case BizTalkApplicationEnum.Scip:
return context.ScipRecs;
}
return null;
}
}
Интерфейс IActivity определяется следующим образом:
public interface IActivity
{
string ActivityID { get; set; }
string InterchangeId { get; set; }
DateTime LastModified { get; set; }
DateTime? TimeReceived { get; set; }
DateTime? TimeSent { get; set; }
string RoutingSource { get; set; }
string RoutingTarget { get; set; }
string RoutingToClient { get; set; }
string RoutingMaster { get; set; }
string ReceivePort { get; set; }
string SendPort { get; set; }
string RoutingMessageType { get; set; }
}
... и контекст BAM:
public class BAMContext : DbContext
{
public BAMContext()
: base("BAMPrimaryImportConString")
{
this.Configuration.LazyLoadingEnabled = false;
Database.SetInitializer<BAMContext>(null);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
public virtual DbSet<Erp> ErpRecs { get; set; }
public virtual DbSet<Scip> ScipRecs { get; set; }
}
Моя проблема, я получаю следующая погрешность компиляции: по операциям возврата в случае:
Error CS0029 Cannot implicitly convert type 'System.Data.Entity.DbSet<TVS.ESB.BamPortal.DomainClasses.BAM.Erp>' to 'System.Data.Entity.DbSet<TVS.ESB.BamPortal.DomainClasses.BAM.IActivity>'
Может кто-нибудь, пожалуйста, дайте мне знать, как я могу решить эту проблему?
Где именно вы получаете сообщение об ошибке? – Domysee
Ошибка компиляции в этой строке: «return context.ErpRecs;» и эта строка: «return context.ScipRecs;» –
Хорошо. Вы написали «* Некоторые из этих DbSets реализуют интерфейс IActivity *», реализуют ли DbSets этот интерфейс или модели, которые он инкапсулирует? – Domysee