2013-04-23 2 views
0

Попытка получить мою голову вокруг LINQ и наследования отображения я получаю исключение в DBContext.cs когда ConnectionString линия выполнена:LINQ к SQL Inheritance InvalidOperationException

Could not retrieve Table for inheritance subtype 'Movie, try Table of 'Media' instead

DBContext.cs

[Database] 
public class DBContext : DataContext 
{ 
    public DBContext() : base(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString){ } 

    public Table<Member> members; 
    public Table<Media> media; 
    public Table<Movie> movies; 
    public Table<Game> games; 
    public Table<Track> tracks; 
    public Table<Album> albums; 
    // public Table<Loaned> loaned; 
} 

Media.cs

[Table(Name="media")] 
[InheritanceMapping(Code = 1, Type = typeof(Movie), IsDefault=true)] 
[InheritanceMapping(Code = 2, Type = typeof(Game))] 
[InheritanceMapping(Code = 3, Type = typeof(Album))] 
[InheritanceMapping(Code = 4, Type = typeof(Track))] 
public class Media 
{ 
    [Column(IsPrimaryKey=true)] 
    public string itemId; 

    [Column] 
    public string title { get; set; } 

    [Column] 
    public string price { get; set; } 

    [Column(IsDiscriminator=true)] 
    public int itemType { get; set; } 
} 

Movie.cs

public class Movie : Media 
{ 
    [Column] 
    public int year { get; set; } 
} 

А вот код, вызывающий все:

public static void GetAll() 
    { 
     using (DBContext db = new DBContext()) 
     { 
      IEnumerable<Media> media = from m in db.media select m; 
     } 
    } 
} 

У меня есть чувство, что я отсутствующий некоторые досадные атрибут отображения.

ответ

0

Кажется, я не обращал внимания на LINQ's single table inheritance. Я удалил все, кроме:

public Table<Member> members; 
public Table<Media> media; 

Теперь это работает. У меня был каждый элемент мультимедиа в его собственной таблице, который не поддерживается.

Смежные вопросы