|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Здравствуйте. Имеется 2 типа объектов. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
как задать для класса B поля AId и LocalIndex первичным составным ключем с помощь аттирбутов? (FluentApi пока не смотрел) [Key] выдает ошибочку ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 11:57 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 12:06 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Алексей К, спасибо. Еще такой тогда вопрос. Если мы в В добавляем ссылку на А, то в БД генерируется еще одно поле A_Id, кторое я и так указал явно(для задания ключа). Как это обойти? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
И еще появился другой немного вопрос, если позволите ) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
тут он выдаст ошибку (так как А1 и А2 не попадают под соглашения для навигации). Но при этом аттрибут RelativeTo почему то отсутствует... (версия 4.3.1). Тут только через FluentApi делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 12:25 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Sky DragonАлексей К, спасибо. Еще такой тогда вопрос. Если мы в В добавляем ссылку на А, то в БД генерируется еще одно поле A_Id, кторое я и так указал явно(для задания ключа). Как это обойти?Я модель генерирую по БД а не наоборот. Чего и Вам советую. :-) Впрочем, тут всё неплохо описано. Sky Dragonтут он выдаст ошибку (так как А1 и А2 не попадают под соглашения для навигации). Но при этом аттрибут RelativeTo почему то отсутствует... (версия 4.3.1). Тут только через FluentApi делать? Я не знаю что за атрибут RelativeTo. Для ассоциаций использую ForeignKeyAttribute и InversePropertyAttribute. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 12:37 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Алексей К, А как же все вопросы о DDD? :) И если объекты будут в отдельной сборке, то и TDD+моки ) а генерировать по БД мне не понравилось. Там куча всего лишнего в объектах. Ну и то, что они вместе с доступом к бд в одной куче лежат. А вообще, БД то тоже есть. А теперь хочется написать объекты простыми(слово POCO мне не очень нравится). А потом с помощью EF это все связать... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 12:42 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Sky Dragonа генерировать по БД мне не понравилось. Там куча всего лишнего в объектах.Напишите свой кодогенератор. Чтобы генерировалось как Вам нравится. Sky DragonА вообще, БД то тоже есть. А теперь хочется написать объекты простыми(слово POCO мне не очень нравится). А потом с помощью EF это все связать...Бестолковая двойная работа. С другой стороны, если БД маленькая - можно и вручную. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 12:56 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Sky DragonА как же все вопросы о DDD?Отношусь ко всему этому как к типизированой обёртке SQL, не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 12:58 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Sky DragonИ если объекты будут в отдельной сборке, то и TDD+моки )Организуйте БД с тестовыми данными, и никакие моки не потребуются. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 12:59 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
А полноценную БД Вы никогда по модели не сгенерируете. Массу моментов в любом случае придётся прописывать вручную. Как минимум - индексы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 13:04 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
как все печально... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 13:08 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Sky Dragonкак все печально...Почему печально? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2012, 15:16 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Алексей К, ну просто Ваши ответы не внушают оптимизма ) а InverseProperty не помог. Так как в классе A нужна только одна ссылка на B. А для InverseProperty надо две, причем одна из них будет всегда нулевой. сам EntityFramework так и генерирует кстати, по 2 ссылки. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 11:31 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Sky Dragonну просто Ваши ответы не внушают оптимизма )Ну не знаю. Меня EF Code First очень радует. :-) Sky DragonТак как в классе A нужна только одна ссылка на B. А для InverseProperty надо две, причем одна из них будет всегда нулевой.Мне казалось InverseProperty необязателен. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 13:40 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Алексей КНу не знаю. Меня EF Code First очень радует. :-) но при этом: Алексей КЯ модель генерирую по БД а не наоборот. Чего и Вам советую. :-) :) просто если оставлять сгенерированные объекты EF, то придется делать еще типа дополнительных DTO, которые в принципе просто копия их же. Алексей КМне казалось InverseProperty необязателен. А как тогда задать аттрибутами: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
чтобы он правильно БД сгенерировал? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 14:05 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Sky Dragonпросто если оставлять сгенерированные объекты EF, то придется делать еще типа дополнительных DTO, которые в принципе просто копия их же.Зачем? Почему бы не использовать сгенерированные классы в Вашей бизнес-логике? Sky DragonА как тогда задать аттрибутами: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
чтобы он правильно БД сгенерировал?Я БД не генерировал, возможно я действительно чего-то не знаю, и от моих советов становится только хуже. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2012, 15:29 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Алексей К, Сгенерированные классы вместе с собой таксают и весь слой доступа к БД. То есть например, чтобы сделать модель представленяи объектов, по модели, сгенерированной EF, нам надо в представление передать всю модель. И получается, что из представления мы имеем полынй доступ к слою досутпа(простите за тавтологию) к данным. А это не есть хорошо. А если иметь отдельные объекты(типа DTO) то их ведь можно по всем уровням гонять, не беспокоясь о том, что кто-то будет знать лишнего. Ну это мое субъективное некомпетентное(полгода опыта работы программистом :)) ) мнение. А по поводу второ вопроса, скажу чуть по конктрнее. Имеется точка входа. На нем есть входной и выходной считыватель. Ну, типа карточек. то есть в бд вход имеет 2 поля(InReaderId и OutReaderId). Ну и они ссылаются на одну табличку ридеров. Ну и в объектах соответсенно хочется иметь: во входе - 2 ссылочки на вх и вых считыватели. А в считывателе - ОДНУ ссылку на вход, на котором она висит. И вот что генерирует EF: картинка в приложенном файле. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 11:06 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Вот и получаеются инверсные свойства... Entrance - InReader и Entrance1 - OutReader. А это как то вообще гадость) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 11:07 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Sky DragonВот и получаеются инверсные свойства... Entrance - InReader и Entrance1 - OutReader. А это как то вообще гадость)Ну может их можно переименовать вручную? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 12:00 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
В дизайнере. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 12:01 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Алексей К, переименовать не проблема ) Пороблема в том, что у ридера 2(!) свойства входа. А реально - только одно(ридер не может висеть одновременно на двух входах, и не может одновременно висеть и на входе и на выходе одной точки входа). Поэтому, как я полагаю, одно из них, всегда будет нулевым. И придется потом везде делать сравнения, если это не ноль, тогда берем это... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 12:03 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Sky DragonАлексей К, переименовать не проблема ) Пороблема в том, что у ридера 2(!) свойства входа. А реально - только одно(ридер не может висеть одновременно на двух входах, и не может одновременно висеть и на входе и на выходе одной точки входа). Поэтому, как я полагаю, одно из них, всегда будет нулевым. И придется потом везде делать сравнения, если это не ноль, тогда берем это...Ну если так не нравится, значит структуру данных надо менять. EF тут вообще непричём. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 12:17 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Алексей К, но эти свойства навигации же EF генерирует)) А более лучшей структры БД пока не придумали... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 12:21 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Sky Dragonно эти свойства навигации же EF генерирует))Ну он же их по БД генерирует а не с потолка берёт. :-) Sky DragonА более лучшей структры БД пока не придумали...Вместо 2-х полей InReaderId и OutReaderId переходная таблица вроде: ReaderID int not null, EntranceID int not null, EntranceType int not null /*1 - In, 2 - Out*/ ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 12:29 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Алексей К, идея хорошая, еще над ней поразмыслю но... получается связь многие ко многим. и добавляется еще один объект-связка, с которым тоже придется что-то дополнительно делать... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 13:00 |
|
EF CodeFirst задать составной первичный ключ
|
|||
---|---|---|---|
#18+
Sky DragonАлексей К, идея хорошая, еще над ней поразмыслю но... получается связь многие ко многим. и добавляется еще один объект-связка, с которым тоже придется что-то дополнительно делать...Но зато решается описанная выше проблема. Это решение, как и все остальные, со своими плюсами и минусами. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2012, 13:04 |
|
|
start [/forum/topic.php?fid=17&tid=1350331]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 178ms |
0 / 0 |