我有一个包含许多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