Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ inheritance mappings что то ту не так! / 18 сообщений из 18, страница 1 из 1
07.04.2008, 13:32
    #35239512
Bill Great
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
Привет всем!
Казалось бы простая вещь! В книге "Pro LINQ: Language Integrated Query in C# 2008" приведен следующий пример. Создаётся таблица
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE [dbo].[Shape](
	[Id] [int] IDENTITY( 1 , 1 ) NOT NULL PRIMARY KEY,
	[ShapeCode] [nvarchar]( 2 ) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL,
	[StartingX] [int] NULL,
	[StartingY] [int] NULL,
	[Length] [int] NULL,
	[Width] [int] NULL
)
К ней предлагается mapping
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
[Table]
[InheritanceMapping(Code = "G", Type = typeof(Shape), IsDefault = true)]
[InheritanceMapping(Code = "S", Type = typeof(Square))]
public class Shape
{
[Column(IsPrimaryKey = true, IsDbGenerated = true,
DbType = "Int NOT NULL IDENTITY")]
public int Id;
[Column(IsDiscriminator = true, DbType = "NVarChar(2)")]
public string ShapeCode;
[Column(DbType = "Int")]
public int StartingX;
[Column(DbType = "Int")]
public int StartingY;
}
public class Square : Shape
{
[Column(DbType = "Int")]
public int Width;
}
Заметте, что у наследуемой таблицы есть свои поля. Если попытаться сделать простой проект типа
Код: plaintext
1.
2.
3.
4.
dataGridView1.DataSource =
                from c in db.GetTable <Shape>()
                where c is Square
                select c;
То результат ПУСТОЙ!!!!
...
Рейтинг: 0 / 0
07.04.2008, 13:35
    #35239518
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
а запрос посмотрел, как выглядит? может тогда станет понятно, что не так?
...
Рейтинг: 0 / 0
07.04.2008, 14:09
    #35239661
Bill Great
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
Артем1а запрос посмотрел, как выглядит? может тогда станет понятно, что не так?
Запрос выглядит нормально! Я поясню "ПУСТО" - не в смысле записей - их выводится столько сколько есть с Derived Class Descriminator, но поля которое есть у child НЕТ! В других книгах примеры с inheritance mappings устроены так что у наследуемого класса своих полей НЕТ!
...
Рейтинг: 0 / 0
07.04.2008, 14:12
    #35239678
Bill Great
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
Вот как выглядит проект
...
Рейтинг: 0 / 0
07.04.2008, 14:16
    #35239694
Bill Great
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
Mind you head!
...
Рейтинг: 0 / 0
07.04.2008, 14:34
    #35239795
Bill Great
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
Код: plaintext
1.
2.
3.
4.
  dataGridView1.AutoGenerateColumns = true;
  dataGridView1.DataSource = from c in db.GetTable<Shape>()
                                            where c is Square
                                            select c; 
...
Рейтинг: 0 / 0
07.04.2008, 14:48
    #35239874
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
Код: plaintext
1.
2.
3.
  dataGridView1.AutoGenerateColumns = true;
  dataGridView1.DataSource = from c in db.GetTable<Square>()
                                            select c; 

Код: plaintext
1.
2.
3.
4.
  dataGridView1.AutoGenerateColumns = true;
  dataGridView1.DataSource = from c in db.GetTable<Shape>()
                                            where c is Square
                                            select c as Square; 

??
с синтаксисом запросов еще не очень, а попробовать не на чем. поможет?
...
Рейтинг: 0 / 0
07.04.2008, 14:53
    #35239906
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
и вправду, ты тянешь базовую сущность из базы, откуда там взяться остальным полям? проще говоря, кудя их положить-то?:)
...
Рейтинг: 0 / 0
07.04.2008, 15:52
    #35240176
Bill Great
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
зыи вправду, ты тянешь базовую сущность из базы, откуда там взяться остальным полям? проще говоря, кудя их положить-то?:)
Как же правильно писать?
...
Рейтинг: 0 / 0
07.04.2008, 15:53
    #35240181
Bill Great
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
Bill Great зыи вправду, ты тянешь базовую сущность из базы, откуда там взяться остальным полям? проще говоря, кудя их положить-то?:)
Как же правильно писать или наследовать?
...
Рейтинг: 0 / 0
07.04.2008, 15:57
    #35240197
Bill Great
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
Пробуем
1
Код: plaintext
1.
2.
 dataGridView1.DataSource = from c in db.GetTable<Square>()                                            
                                            select c; 
Could not retrieve a Table for inheritance subtype 'WindowsFormsApplication1.Square', try Table of WindowsFormsApplication1.Shape instead.

2
Код: plaintext
1.
2.
3.
 dataGridView1.DataSource = from c in db.GetTable<Shape>()
                                            where c is Square
                                            select c as Square;
Конструктор для типа "System.Data.Linq.Provider.DataBindingList`1[[WindowsFormsApplication1.Shape, WindowsFormsApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" не найден.
...
Рейтинг: 0 / 0
07.04.2008, 16:12
    #35240264
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
а не знаю как правильно, не пробовал :) но наверное гугл в помощь
...
Рейтинг: 0 / 0
07.04.2008, 16:44
    #35240372
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
нда. я еще до наследования в линке не добрался. но уже интересно тоже стало, как же правильно :)
придется поднимать виртуалку :)
...
Рейтинг: 0 / 0
07.04.2008, 17:10
    #35240502
Bill Great
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
зыа не знаю как правильно, не пробовал :) но наверное гугл в помощь
Вот статья MSDN
Я выполняю пример и получаю ошибку!

Код: plaintext
1.
2.
var q = db.Vehicle.Where(p => p is Truck);
foreach (Truck p in q)
   Console.WriteLine(p.Axles);
Не удалось привести тип объекта "WindowsFormsApplication1.Vehicle" к типу "WindowsFormsApplication1.Truck".
Может у меня что то кривое? VS 2008 + MS SQL 2005? причем у меня поля унаследованной таблицы не возвращяются. На сервере запрос

Код: plaintext
1.
2.
exec sp_executesql N'SELECT [t0].[Key], [t0].[Tonnage], [t0].[Axles], [t0].[VIN], [t0].[MfgPlant]
FROM [Vehicle] AS [t0]
WHERE ([t0].[Key] = @p0) AND ([t0].[Key] IS NOT NULL)',N'@p0 nvarchar(1)',@p0=N'T'
...
Рейтинг: 0 / 0
07.04.2008, 17:22
    #35240554
Bill Great
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
зыа не знаю как правильно, не пробовал :) но наверное гугл в помощь
Все примеры не перепробуешь но устроены одинаково ( здесь ещё )

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
var query = from p in ctx.GetTable<Person>()
            select p; 

foreach (Person p in query)
{
    if ( p is Employee )
        // Do something with employees
}
У меня это пустые данные!
...
Рейтинг: 0 / 0
07.04.2008, 17:26
    #35240569
Bill Great
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
Повторяю у меня VS 2008 + MS SQL 2005. Попробуйте! Итого такой. Если у класса наследника нет полей то работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
    [Table(Name = "dbo.StrRefer")]
    [InheritanceMapping(Code = "G", Type = typeof(StrRefer), IsDefault = true)]
    [InheritanceMapping(Code = "Упаковки", Type = typeof(Packs))]
    public class StrRefer
    {
        [Column(IsDiscriminator = true, DbType = "NVarChar(64)")]
        public string str_code { get; set; }
        [Column]
        public string str_value { get; set; }

    }
    //str_value
    public class Packs : StrRefer
    {

    }

   var q=    from c in db.GetTable<StrRefer>()
                where c is Packs
                select c; // ТО что надо!


Если пишем у наследника свои поля, как в большинстве примеров - то не работает!
...
Рейтинг: 0 / 0
07.04.2008, 18:09
    #35240747
хламист
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ inheritance mappings что то ту не так!
Bill GreatПробуем
PublicKeyToken=null]]" не найден.
а конструктор у типов shape и square объявлен?
...
Рейтинг: 0 / 0
07.04.2008, 18:59
    #35240876
LINQ inheritance mappings что то ту не так!
хламист
а конструктор у типов shape и square объявлен?
Коль нарисованы в O/R Designer то обязательно!
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ inheritance mappings что то ту не так! / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]