首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将DbSet转换为DbSet<T>,其中T是dbset的元素类型的接口

将DbSet转换为DbSet<T>,其中T是dbset的元素类型的接口
EN

Stack Overflow用户
提问于 2013-11-30 11:20:25
回答 1查看 6.5K关注 0票数 2

我可以将DbSet从DbSet获取到DbSet吗?

代码语言:javascript
复制
  public IQueryable<T> GetData<T>() where T : class, IData
  { 
      var factory = EntityFrameworkConfiguration.TypeFactory[typeof(T)];
      var context = factory.Item2();         // context is a DbContext.
      var set = context.Set(factory.Item1);  //factory.Item1 is a Type object.
      return set.Cast<T>();

  }

factory.Item1是实现接口T的类的类型

简单的例子:

代码语言:javascript
复制
context.Set(typeof(MyClass));
how to return DbSet<IMyClass> ?  

更新

只是添加了更多的信息:

System.InvalidCastException:无法从非泛型DbSet为类型为“”AzureStoreSubscriptionWrapper“”的对象创建DbSet。“”和代码:

代码语言:javascript
复制
[Title("AzureStoreSubscription"), DataScope("public"), KeyPropertyName("id_AzureStoreSubscriptionId"), ImmutableTypeId("{7a71540b-2eeb-32ae-a850-61c97e28df06}"), RelevantToUserType(UserType.Developer)]
public interface IAzureStoreSubscription : IData, IEntityFrameworkProvided
{
    // Properties
    [StoreFieldType(PhysicalStoreFieldType.DateTime), ImmutableFieldId("{35977476-f662-528b-8236-e993b65796a5}")]
    DateTime dt_ChangedTime { get; set; }
    [ImmutableFieldId("{cdc95aeb-a951-533c-87de-811fd4967ea6}"), StoreFieldType(PhysicalStoreFieldType.DateTime)]
    DateTime dt_CreatedTime { get; set; }
    [StoreFieldType(PhysicalStoreFieldType.String, 50), ImmutableFieldId("{83e0e743-0ec3-5f29-a4bd-14a1b97a13a8}")]
    DateTime? dt_DeletedTime { get; set; }
    [StoreFieldType(PhysicalStoreFieldType.Guid), ImmutableFieldId("{82f8da9f-00fa-5a00-b392-d47cb2d362d5}")]
    Guid id_AzureStoreSubscriptionId { get; set; }
    [ImmutableFieldId("{3bbef642-c88b-5a13-be89-65d537de3eb6}"), StoreFieldType(PhysicalStoreFieldType.Guid)]
    Guid id_TenantId { get; set; }
    [ImmutableFieldId("{273bd594-7aea-5ca0-b8da-4680a264bcfd}"), StoreFieldType(PhysicalStoreFieldType.String, 50)]
    string nvc_Email { get; set; }
    [StoreFieldType(PhysicalStoreFieldType.String, 50), ImmutableFieldId("{64d29805-d76a-55b0-a61a-abb76b5fd096}")]
    string nvc_EntityState { get; set; }
    [StoreFieldType(PhysicalStoreFieldType.String, 50), ImmutableFieldId("{a2172fef-de9a-559c-b33c-6c32d7f99727}")]
    string nvc_OptIn { get; set; }
    [ImmutableFieldId("{e1bb5d48-2d72-5ffc-b86f-f78216ea4ee4}"), StoreFieldType(PhysicalStoreFieldType.String, 50)]
    string nvc_RawData { get; set; }
    [ImmutableFieldId("{3e879595-9bbd-555f-8f63-f438e722915a}"), StoreFieldType(PhysicalStoreFieldType.String, 50)]
    string nvc_ResourceType { get; set; }
    [StoreFieldType(PhysicalStoreFieldType.String, 50), ImmutableFieldId("{67bd2cba-9c36-594c-8586-39c71974e572}")]
    string nvc_SubscriptionId { get; set; }
}




public class C1AzureStoreRPContext : DbContext
{
    // Methods
    public C1AzureStoreRPContext(string connectionstring);

    // Properties
    public DbSet<AzureStoreResourceWrapper> AzureStoreResource { get; set; }
    public DbSet<AzureStoreSubscriptionWrapper> AzureStoreSubscription { get; set; }
}




[Table("AzureStoreSubscriptions", Schema="cwac")]
public class AzureStoreSubscriptionWrapper : AzureStoreSubscription, IAzureStoreSubscription, IData, IEntityFrameworkProvided
{
    // Fields
    private DataSourceId _dataSourceId;

    // Methods
    public AzureStoreSubscriptionWrapper();

    // Properties
    [StoreFieldType(PhysicalStoreFieldType.DateTime), ImmutableFieldId("{35977476-f662-528b-8236-e993b65796a5}")]
    DateTime IAzureStoreSubscription.dt_ChangedTime { get; set; }
    [ImmutableFieldId("{cdc95aeb-a951-533c-87de-811fd4967ea6}"), StoreFieldType(PhysicalStoreFieldType.DateTime)]
    DateTime IAzureStoreSubscription.dt_CreatedTime { get; set; }
    [StoreFieldType(PhysicalStoreFieldType.String, 50), ImmutableFieldId("{83e0e743-0ec3-5f29-a4bd-14a1b97a13a8}")]
    DateTime? IAzureStoreSubscription.dt_DeletedTime { get; set; }
    [StoreFieldType(PhysicalStoreFieldType.Guid), ImmutableFieldId("{82f8da9f-00fa-5a00-b392-d47cb2d362d5}")]
    Guid IAzureStoreSubscription.id_AzureStoreSubscriptionId { get; set; }
    [ImmutableFieldId("{3bbef642-c88b-5a13-be89-65d537de3eb6}"), StoreFieldType(PhysicalStoreFieldType.Guid)]
    Guid IAzureStoreSubscription.id_TenantId { get; set; }
    [ImmutableFieldId("{273bd594-7aea-5ca0-b8da-4680a264bcfd}"), StoreFieldType(PhysicalStoreFieldType.String, 50)]
    string IAzureStoreSubscription.nvc_Email { get; set; }
    [StoreFieldType(PhysicalStoreFieldType.String, 50), ImmutableFieldId("{64d29805-d76a-55b0-a61a-abb76b5fd096}")]
    string IAzureStoreSubscription.nvc_EntityState { get; set; }
    [StoreFieldType(PhysicalStoreFieldType.String, 50), ImmutableFieldId("{a2172fef-de9a-559c-b33c-6c32d7f99727}")]
    string IAzureStoreSubscription.nvc_OptIn { get; set; }
    [ImmutableFieldId("{e1bb5d48-2d72-5ffc-b86f-f78216ea4ee4}"), StoreFieldType(PhysicalStoreFieldType.String, 50)]
    string IAzureStoreSubscription.nvc_RawData { get; set; }
    [ImmutableFieldId("{3e879595-9bbd-555f-8f63-f438e722915a}"), StoreFieldType(PhysicalStoreFieldType.String, 50)]
    string IAzureStoreSubscription.nvc_ResourceType { get; set; }
    [StoreFieldType(PhysicalStoreFieldType.String, 50), ImmutableFieldId("{67bd2cba-9c36-594c-8586-39c71974e572}")]
    string IAzureStoreSubscription.nvc_SubscriptionId { get; set; }
    public DataSourceId DataSourceId { get; }
}
EN

回答 1

Stack Overflow用户

发布于 2013-11-30 11:36:33

您可以不在DbSet上再次运行Cast方法吗?

http://msdn.microsoft.com/en-us/library/gg696369(v=vs.113).aspx

因此,如果下面是您的DbSet:

代码语言:javascript
复制
var myClassSet = context.Set(typeof(MyClass));

您应该能够像这样将其转换为:

代码语言:javascript
复制
return myClassSet.Cast<IMyClass>();

它应该通过直接强制转换来转换,这样它就不会在转换为继承的类时出现问题。如果这不起作用,请查看此链接:

http://social.msdn.microsoft.com/Forums/en-US/bb2ba471-7a19-4886-854b-eb5c7ebfcf74/dbsett-and-casting?forum=csharplanguage

我希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20296107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档