我有一個包含許多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