Kirsten
Kirsten

Reputation: 18160

DevExpress XAF EF with TPC , abstract class is only visible in model designer at run time

I want to use Table Per Concrete Class as the inheritance strategy for my XAF Code First EF project.

I use the wizard to create the project and then paste in classes from the following

namespace Solution12.Module.BusinessObjects {

public abstract class BaseBO  // abstract class helpful in getting TPC
{
    [Key]
    public int Id { get; set; }
    public string Description { get; set; }
}

[NavigationItem("People")]
[Table("People")]  // explicit table name is helpful in preventing TPH
public class Person : BaseBO
{
    public string PersonName { get; set; }
}

[NavigationItem("Organisation")]
[Table("Organisations")]
public class Organisation : BaseBO
{
    public string OrganisationName { get; set; }
}
public class Solution12DbContext : DbContext {
    ...
    public DbSet<Organisation> Organisations{ get; set; }

    public DbSet<Person> People { get; set; }
    //public DbSet<BaseBO> baseBOs { get; set; }  // having this will cause TPT instead of TPC
   }
}

This all works as I want, to create the database structure. However I cant see the abstract class in the model designer at design time. I can see the abstract class and it's views in the model designer at run time.

How can I get the model designer to show the abstract class BaseBO at design time?

This is a significant issue for us because run-time customizations are stored in the database and hence not part of our source control.

A ticket for this problem can also be found at Dev Express Support here however this is a more concise statement of what we now understand to be the problem.

Upvotes: 1

Views: 349

Answers (1)

Kirsten
Kirsten

Reputation: 18160

It seems that if we pop the following into each concrete class then we get the desired behavior

    [NotMapped]
    public BaseBO BaseBo {
        get
        {
            return (BaseBO)this;
        }
    }

Upvotes: 0

Related Questions