Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
netivan
Алексей К,

вы кстати свой шаблон так и не показали. Секрет фирмы ?
А пожалуйста. :-)

Исходник во вложении. Пример использования:
<#@ template hostSpecific="true" #>
<#@ output extension=".generated.cs" #>
<#@ include file="$(SolutionDir)\TextTemplates\Db\EF\EF.ttinclude" #>
<#@ include file="$(SolutionDir)\TextTemplates\Db\EF\MSSQL.ttinclude" #>
<#	
    ProviderName = "System.Data.SqlClient";
    ConnectionString = @"Data Source=TRACTOR\DEV5;Initial Catalog=Asubm;Integrated Security=True";	
    Namespace = "DbMain";
    DataContextName = "DbMainContext";
    WsNamespace = "WsnsDbMain.DbMain";
	
    LoadMetadata();
    SetViewMetadata();	
    GenerateModel();
#><#+ 	
	void SetViewMetadata()
	{
		Tables["sec_rolesTree"].Columns["RootID"].PKIndex = 1;
		Tables["sec_rolesTree"].Columns["ID"].PKIndex = 2;
	}	
#>


К сообщению приложен файл (DbContextFromDb.zip - 6Kb) cкачать
25 дек 12, 12:25    [13681828]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
netivan
Алексей К,

погодите, может быть я не понимаю. Каким образом edmx будет тормозить?


http://stackoverflow.com/questions/6185918/entity-framework-4-1-for-large-number-of-tables-715

Конкретный ответ
Large database is always something special. Any technology has some pros and cons when working with a large database.

The problem you have encountered is the most probably related to building the model. When you start the application and use EF related stuff for the first time EF must build the model description and compile it - this is the most time consuming operation you can find in EF. Complexity of this operation grows with number of entities in the model. Once the model is compiled it is reused for the whole lifetime of the application (if you restart the application or unload application domain the model must be compiled again). You can avoid this by precompiling the model. It is done at design time where you use some tool to generate code from the model and you include that code into your project (it must be done again after each change in the model). For EDMX based models you can use EdmGen.exe to generate views and for code first based models you can use EF Power Tools CTP1.

EDMX (the designer) was improved in VS 2010 SP1 to be able to work with large models but I still think the large in this case is around 100 entities / tables. In the same time you rarely need 715 tables in the same model. I believe that these 715 tables indeed model several domains so you can divide them into multiple models.

The same is true when you are using DbContext and code first. If you model a class do you think that it is correct design when the class exposes 715 properties? I don't think so but that is exactly what your derived DbContext looks like - it has a public property for each exposed entity set (in the simplest mapping it means one property per table).

Same entity can be used in multiple models but you should try to avoid it as much as possible because it can introduce some complexities when loading entity in one context type and using it in other context type.

Code only = code first = Entity framework when you define mapping in the code without using EDMX.
25 дек 12, 12:26    [13681841]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
Вдогонку, навсякий...

Сделано на базе генератора от BLToolkit. Частично переписано, но кое что осталось.
25 дек 12, 12:26    [13681842]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
netivan
Алексей К,

погодите, может быть я не понимаю. Каким образом edmx будет тормозить?
Ну просто мне кажется, что работать с диаграммой, содержащей 100+ квадратиков и XXX стрелочек несколько неудобно. :-)
25 дек 12, 12:28    [13681853]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
netivan
Member

Откуда:
Сообщений: 8768
Алексей К,

если вы про тормоза самого дизайнера, то может быть. у меня около 50 квадратиков.
25 дек 12, 12:37    [13681917]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Алексей К
А пожалуйста. :-)


+ Пощупал...
[DataContract(Namespace = WsnsDbMain.DbMain)]
[Table("Catalogs", Schema = "dbo")]
public partial class Catalogs
{
	[Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity), DataMember]
	public int? CatalogId { get; set; }

	[Required(ErrorMessage = DbMainContext.RequiredFieldMessage), DataMember]
	public string Title { get; set; }

	[DataMember]
	public int? Parent_CatalogId { get; set; }


	[ForeignKey("Parent_CatalogId")]
	public Catalogs Parent_CatalogId_Reference { get; set; }

	[InverseProperty("Catalog_CatalogId_Reference")]
	public List<Articles> Articles_Catalog_CatalogId_Reference { get; set; }

	[InverseProperty("Parent_CatalogId_Reference")]
	public List<Catalogs> Catalogs_Parent_CatalogId_Reference { get; set; }
}


За такие классы в прикладном коде, Лёша, с именованиями типа "Articles_Catalog_CatalogId_Reference", "Catalogs_Parent_CatalogId_Reference" и иже, хочется сходить в конюшню к конюху и одолжить у него плеть :)
25 дек 12, 12:38    [13681920]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
МСУ
За такие классы в прикладном коде, Лёша, с именованиями типа "Articles_Catalog_CatalogId_Reference", "Catalogs_Parent_CatalogId_Reference" и иже, хочется сходить в конюшню к конюху и одолжить у него плеть :)
Я считаю такой принцип именования ассоциаций наиболее правильным!
25 дек 12, 12:39    [13681932]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Алексей К
Я считаю такой принцип именования ассоциаций наиболее правильным!

Ты где такую траву берешь? :) Правильнее наименований у вот таких маппингов и быть ничего не может.
Во-вторых, за отсутствие плюрализации - сразу веником из избы!
25 дек 12, 12:43    [13681951]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
МСУ
Правильнее наименований у вот таких маппингов и быть ничего не может.
Во-вторых, за отсутствие плюрализации - сразу веником из избы!
Плюрализация только добавит беспорядка. Более того, я не верю в плюрализацию, которая работает всегда и везьде - это утопия. А раз это так - значит она нах не нужна. В BLToolkit-ном варианте она была (есть), я её убрал.

А если между таблицами несколько связей? Вручную будете имена придумывать? Это не наш метод!

По названию видно по каким полям идёт связь. Поначалу тоже было непривычно, потом привык, даже понравилось. :-)
25 дек 12, 12:49    [13681997]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Алексей К
Плюрализация только добавит беспорядка.

Как-раз наоборот, она внесет ясность в именования и сделает модели более понятными.

Алексей К
Более того, я не верю в плюрализацию, которая работает всегда и везьде - это утопия. А раз это так - значит она нах не нужна. В BLToolkit-ном варианте она была (есть), я её убрал.

Ты должен верить в плюрализацию, верь мне. Она работает везде в 99% случаев, а где не работает, используется дефолтное имя. Во-вторых, не плюрализация виновата, а виноват кодирующая db-обезьянка кривожопница, которая нагавняла в именованиях базы.

Алексей К
А если между таблицами несколько связей? Вручную будете имена придумывать? Это не наш метод!

Давать пользователю классов самому подправлять, как это сделано в edmx (без потери изменений при ран растоме). В твоем же случае этого нет, разве что выдумывать пользовательские настройки к шаблону, что есть грабли.

Алексей К
По названию видно по каким полям идёт связь. Поначалу тоже было непривычно, потом привык, даже понравилось. :-)

Это утопия. Да ну нах такой гавнокод, друх. Еще раз убедился, что либо человеческий DbFirst с мощным дизайнером и всеми его гибкими настройками, либо человеческий CodeFist для полностью мануального управления классами. Всё остально - какашка без соуса от конструкторов изобретателей, которым заняться нечем :)
25 дек 12, 12:56    [13682053]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
МСУ
Parent_CatalogId

А вот за такие названия полей в базе вообще нужно <censored/> в сортире. Сделайте нормальные имена полей, и ассоциации будут выглядеть лучше. :-)
25 дек 12, 12:58    [13682069]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Lord British
Member

Откуда: На Камчатке красиво?
Сообщений: 758
Алексей К
netivan
Да, кодогенерацию из edmx попробуйте
Не. Не хочу пользоваться неудобным дизайнером. Кодогенерация напрямую из БД избавляет меня от этого неудобства. :-)
Если БД маленькая - с дизайнером ещё как-то можно. К сожалению, в моей практике такие не встречаются. :-)

netivan
вы же любите эксперименты :)
Только если от них есть для меня практическая польза. :-)


Я извиняюсь, а для чего вы всю схему БД тяните себе в приложение? Почему не создаете отдельные контексты под определенные наборы задач. И еще CSDL вроде как может быть разделена на отдельные файлы. Пока сам не глядел. Интересно выслушать мнения.
25 дек 12, 13:01    [13682088]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Lord British
Member

Откуда: На Камчатке красиво?
Сообщений: 758
Алексей К
netivan
Алексей К,

погодите, может быть я не понимаю. Каким образом edmx будет тормозить?
Ну просто мне кажется, что работать с диаграммой, содержащей 100+ квадратиков и XXX стрелочек несколько неудобно. :-)


В Power Designer например можно строить диаграммы по частям относящимся к определенным задачам. :) Ну и в студии вроде также не?
25 дек 12, 13:03    [13682113]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
МСУ
Алексей К
А если между таблицами несколько связей? Вручную будете имена придумывать? Это не наш метод!

Давать пользователю классов самому подправлять, как это сделано в edmx (без потери изменений при ран растоме). В твоем же случае этого нет, разве что выдумывать пользовательские настройки к шаблону, что есть грабли.
Видимо речь идёт о SetViewMetadata(). Это не "грабли", а полезная возможность. В представленном примере затесалось добавление первичного ключа к вьюхе, по понятным причинам БД его дать не может. Туда можно вставлять любые преобразования метаданных, в том числе можно явно указать имя ассоциации (возможно придётся чуть поправить генератор). Но мне это не надо, есть возможность однозначно расчитать имя ассоциации, что и сделано.
25 дек 12, 13:03    [13682114]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Lord British
Member

Откуда: На Камчатке красиво?
Сообщений: 758
Алексей К
МСУ
Parent_CatalogId

А вот за такие названия полей в базе вообще нужно <censored/> в сортире. Сделайте нормальные имена полей, и ассоциации будут выглядеть лучше. :-)


А как правильно? ParentCatalogId или CatalogId? А как быть с СУБД в которых это будет выглядеть PARENTCATALOGID и CATALOGID?
25 дек 12, 13:05    [13682134]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Алексей К
МСУ
Parent_CatalogId

А вот за такие названия полей в базе вообще нужно <censored/> в сортире. Сделайте нормальные имена полей, и ассоциации будут выглядеть лучше. :-)

А у меня нет таких полей, есть ParentCatalogId. Разницу чуешь? :) Можешь назвать как хочешь, хоть CatalogId.
25 дек 12, 13:07    [13682156]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
Lord British
Я извиняюсь, а для чего вы всю схему БД тяните себе в приложение? Почему не создаете отдельные контексты под определенные наборы задач.
Нельзя делать запрос к сущностям, живущим в разных контекстах. Следовательно, может возникнуть необходимость дублирования классов-сущностей в разных дб-контекстах. А это, на мой взгляд, не хорошо.

Lord British
И еще CSDL вроде как может быть разделена на отдельные файлы. Пока сам не глядел. Интересно выслушать мнения.
Там в новых версиях EF вроде как добавили возможность разделения диаграммы на части в рамках одного контекста. Ничего больше по этому поводу добавить не могу, не смотрел.
25 дек 12, 13:07    [13682161]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Алексей К
возможно придётся чуть поправить генератор

Мне не нужно постоянно править генератор, мне нужен полноценный настраиваемый механизм.
25 дек 12, 13:09    [13682177]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Lord British
А как правильно? ParentCatalogId или CatalogId? А как быть с СУБД в которых это будет выглядеть PARENTCATALOGID и CATALOGID?

Видимо он считает, что Catalogs_Parent_CatalogId_Reference лучше
25 дек 12, 13:10    [13682191]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
МСУ
Lord British
А как правильно? ParentCatalogId или CatalogId? А как быть с СУБД в которых это будет выглядеть PARENTCATALOGID и CATALOGID?

Видимо он считает, что Catalogs_Parent_CatalogId_Reference лучше

Это пестдец, такую шнягу протаскивать в прикладном коде. Ну Лёша порадовал...

Поле MainDataSupplierId развернется в такую траву: SystemSuppliers_MainDataSupplier_MainDataSupplierId_Reference

Расстрелятьвсехнах (c)
25 дек 12, 13:13    [13682222]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
Lord British
А как правильно? ParentCatalogId или CatalogId?
Ну может ParentID ?
Lord British
А как быть с СУБД в которых это будет выглядеть PARENTCATALOGID и CATALOGID?
Ага, у меня была такая ситуация, когда тренировался с DB2, просто жесть. Могу только посоветовать пользоваться нормальными СУБД, коих одна - MSSQL.
25 дек 12, 13:13    [13682225]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
МСУ
Алексей К
возможно придётся чуть поправить генератор

Мне не нужно постоянно править генератор, мне нужен полноценный настраиваемый механизм.
Мне тоже не нужно его править, я его уже давно не правил. Между нами много общего.
25 дек 12, 13:14    [13682240]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
МСУ
МСУ
пропущено...

Видимо он считает, что Catalogs_Parent_CatalogId_Reference лучше

Это пестдец, такую шнягу протаскивать в прикладном коде. Ну Лёша порадовал...

Поле MainDataSupplierId развернется в такую траву: SystemSuppliers_MainDataSupplier_MainDataSupplierId_Reference

Расстрелятьвсехнах (c)
Даватьнормальныеименаполямблеать!
25 дек 12, 13:15    [13682257]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Алексей К
Между нами много общего.

Через силу-таки выбросил поделие в облако

P.S. Я негодую ) Для себя еще раз окончательно понял, что либо полноценный ручной кодефирст, либо полноценный автоматический DbFirst с дизайнером.
25 дек 12, 13:17    [13682278]     Ответить | Цитировать Сообщить модератору
 Re: EF, DbContext, ObjectContext  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
МСУ
Алексей К
пропущено...

А вот за такие названия полей в базе вообще нужно <censored/> в сортире. Сделайте нормальные имена полей, и ассоциации будут выглядеть лучше. :-)

А у меня нет таких полей, есть ParentCatalogId. Разницу чуешь? :) Можешь назвать как хочешь, хоть CatalogId.
В моём случае главное, чтобы в именах полей не было подчёркиваний. Если не нравится - можно придумать другой принцип именования связей. Мне этот нравится.
25 дек 12, 13:17    [13682285]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4 5   вперед  Ctrl      все
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить