Reputation: 17530
Can I get my DbSet to DbSet from a DbSet.
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 is the type of a Class that implements the Iterface T
simple case:
context.Set(typeof(MyClass));
how to return DbSet<IMyClass> ?
Just adding alittle more information:
System.InvalidCastException: Cannot create a DbSet from a non-generic DbSet for objects of type 'AzureStoreSubscriptionWrapper'. and the code:
[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; }
}
Upvotes: 2
Views: 7345
Reputation: 149
Can you not run the Cast method on the DbSet again?
http://msdn.microsoft.com/en-us/library/gg696369(v=vs.113).aspx
So if the following is your DbSet:
var myClassSet = context.Set(typeof(MyClass));
You should be able to cast it like this:
return myClassSet.Cast<IMyClass>();
It should cast by a direct cast so it shouldn't have an issue casting to an inherited class. If that doesn't work, check out this link:
I hope that helps.
Upvotes: 3