powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / c# Пример Code First реализовать в через Mapping
13 сообщений из 38, страница 2 из 2
c# Пример Code First реализовать в через Mapping
    #39441658
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей ККласс MyDbContext зависит от класса MyEntity?

Нет.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
class MyDbContext : DbContext
{
       protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
            modelBuilder.Configurations.AddFromAssembly(typeof(MyDbContext).Assembly);
        }
}

...

    public class MyEntity
    {
        public virtual long Id { get; set; }

        [MaxLength(200)]
        public virtual string Name { get; set; }

        public class Configuration : EntityTypeConfiguration<MyEntity>
        {
            public Configuration()
            {
                // this.  здесь Fluent-конфигурация сущности MyEntity 
            }
        }
    }

...

using(var db = new MyDbContext ())
{
    var entities = db.Set<MyEntity>().ToList();
}



И это работает. Никакой прямой зависимости от MyEntity нет и не надо. Ручной привод в топку!
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39441663
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nechto Ошибка при добавлении новой связки (Entities in 'Db.MessageReferences' participate in the 'Message_MessageReference' relationship. 0 related 'Message_MessageReference_Source' were found. 1 'Message_MessageReference_Source' is expected.)

Ты забыл предварительно добавить новый MessageBookOne в контекст:

Код: c#
1.
2.
var messageBook = new MessageBookOne { MessageId = 1 };
db.Set<MessageBookOne>().Add(messageBook );
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39441734
Nechto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttNechto Ошибка при добавлении новой связки (Entities in 'Db.MessageReferences' participate in the 'Message_MessageReference' relationship. 0 related 'Message_MessageReference_Source' were found. 1 'Message_MessageReference_Source' is expected.)

Ты забыл предварительно добавить новый MessageBookOne в контекст:

Код: c#
1.
2.
var messageBook = new MessageBookOne { MessageId = 1 };
db.Set<MessageBookOne>().Add(messageBook );


Все работает, я просто проглядел одну связку в классе. Убрал её, все заработало!

Хотел спросить так для полноты вопроса. Если использовать code first, как можно задать свои названия полям ("MessageBookOne_Id" и "BookOne_Id")?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new MessageMap());
    modelBuilder.Configurations.Add(new BookOneMap());

    modelBuilder.Entity<MessageReference>().Map<MessageBookOne>(m => m.Requires("Discriminator").HasValue("MessageBookOne"));
    modelBuilder.Entity<MessageBookOne>()
	    .HasMany<BookOne>(s => s.BookOne)
		.WithMany(s => s.Message).Map(m =>
        {
            m.MapLeftKey("MessageBookOne_Id");
            m.MapRightKey("BookOne_Id");
            m.ToTable("MessageBookOne");
        });
    base.OnModelCreating(modelBuilder);
}
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39441962
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КhVosttпропущено...


Вообще-то не зависит . Не знаю, с чего ты это взял.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class MyEntity
{
}

class MyDbContext : DbContext
{
    public MyEntity MyEntity { get { ... } }
}


Класс MyDbContext зависит от класса MyEntity?

Нет.Ты точно в этом уверен? Возьми таймаут, подумай, с ответом никто не торопит.

hVostt
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
class MyDbContext : DbContext
{
       protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
            modelBuilder.Configurations.AddFromAssembly(typeof(MyDbContext).Assembly);
        }
}

...

    public class MyEntity
    {
        public virtual long Id { get; set; }

        [MaxLength(200)]
        public virtual string Name { get; set; }

        public class Configuration : EntityTypeConfiguration<MyEntity>
        {
            public Configuration()
            {
                // this.  здесь Fluent-конфигурация сущности MyEntity 
            }
        }
    }

...

using(var db = new MyDbContext ())
{
    var entities = db.Set<MyEntity>().ToList();
}



И это работает. Никакой прямой зависимости от MyEntity нет и не надо. Ручной привод в топку!Писать в прикладном коде db.MyEntity удобнее, чем db.Set<MyEntity>() , а это очень важно. Таки контекст-потомок со свойствами лучше описать.
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39441965
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К, чем удобнее?
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39441981
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КТы точно в этом уверен? Возьми таймаут, подумай, с ответом никто не торопит.

Да, точно уверен. У нас в одном небольшом проекте MyDbContext в одной сборке, а классы Entity в другой, и у первой сборки нет ссылки на вторую. Скажи мне, какой тебе ещё нужен показатель того, что класс контекста не зависит от классов Entity?


Алексей КПисать в прикладном коде db.MyEntity удобнее, чем db.Set<MyEntity>() , а это очень важно. Таки контекст-потомок со свойствами лучше описать.

В прикладном коде никто вообще не работает напрямую с MyDbContext. Есть слой запросов и репозиторий, который отлично ложится в описанную мною модель. Это надо чтобы проект был совсем задротский и студенческий, чтобы прописывать все +100500 сущностей в MyDbContext и потом работать с контекстом напрямую. Настолько несерьёзно, что мне не интересно это даже обсуждать. Любой подход имеет право на жизнь, подход зависит от опыта и сложности и умения делать SOLID-решения. Если такого умения нет, можно пихать всё в контекст, ради бога.
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39442314
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Я недавно посмотрел в каком состоянии сейчас ЕФ (вернее, что можно делать с EDM).
Либо я раньше не очень внимательно смотрел, либо теперь появилась возможность налету сгенерировать EDM.
Это уже хорошо, если бы раньше такое было возможно, я бы свой генератор СКЛ не писал бы для ВИПРОС.
Но, кажется все еще нет возможности делать ссылку на разные объекты.
(Т.е. имеется свойство "Лицо", которое является Классификатором - Лицо - {Юрлицо{Банк, Кредитная организация,..} ФизЛицо{ИП, Сотрудник,...}}.
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39442322
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosЯ недавно посмотрел в каком состоянии сейчас ЕФ (вернее, что можно делать с EDM).
Либо я раньше не очень внимательно смотрел, либо теперь появилась возможность налету сгенерировать EDM.

А как это тебе поможет? На лету, ты подразумеваешь в рантайме?


ViPRosЭто уже хорошо, если бы раньше такое было возможно, я бы свой генератор СКЛ не писал бы для ВИПРОС.

Да не, сила EF в конкретной модели для приложения, конкретные классы, конкретная схема. Не для динамики он совершенно определённо. Фишка EF, что можно последовательно развивать модель данных, получая хороший контроль, миграции (или синхронизации), и работать с данными через LINQ (на ограниченном подмножестве запросов, годных для большинства типовых задач). А также иметь возможность переехать с одной СУБД на другую. Это не утопия, если БД использовалась только как хранилище данных, без логик.


ViPRosНо, кажется все еще нет возможности делать ссылку на разные объекты.
(Т.е. имеется свойство "Лицо", которое является Классификатором - Лицо - {Юрлицо{Банк, Кредитная организация,..} ФизЛицо{ИП, Сотрудник,...}}.

Можно через иерархию. На любой класс ты сослаться всё равно не можешь, но можешь сослаться на объект иерархии. Если иерархия слишком широкая (у тебя 100500 классификаторов), то это будет еле шевелиться (если вообще будет). Поэтому твоя задача не натягивается :)

Вообще ВИПРОС отлично ложится на CQRS / ES / DDD, на самом деле, это решение. Тут уже EF точно не в кассу.
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39442335
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВообще ВИПРОС отлично ложится на CQRS / ES / DDD, на самом деле, это решение. Тут уже EF точно не в кассу.
Да просто надоело одному тянуть это дело.
Вот и периодически посматриваю - можно ли что нить покрыть сторонней разработкой.
Но, пока нифига не вижу.
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39442350
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosДа просто надоело одному тянуть это дело.

Научись «продавать» свои идеи и решения :)
Тут по-другому никак.


ViPRosВот и периодически посматриваю - можно ли что нить покрыть сторонней разработкой.
Но, пока нифига не вижу.

Ну EF совершенно точно тебе не поможет.

Тут надо методологию менять. Не работать с табличками в БД. Это уныло, совершенно не гибко, тянет за собой целый вагон костылей и кучу кривых компромиссов.
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39442355
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Потратил мин 20 на эти CQRS|ES
Это та же СУБД, только что транзакшн лог не усекается, а БД для чтения генерируется аспектно, как срезы некоторых событий над объектами.
Т.е. - Объекты никуда не делись.
Ведется лог метаданных объекта, и лог событий меняющих состояние объекта.
И на основе этих логов создаются проекции в разных точках лайфтайма объекта.
Это хорошо для анализа причинно-следственных вещей. И это хорошо, когда событий мало и они необратимы (но, сторнируемы - а это просто ужас, надо всю цепочку до конца анализировать, так как последействие ужасна).
Очень узколобая вещь я тебе скажу, а не технология для широкого применения.

Ну, если бы хотя бы 50 было бы мне :)
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39442363
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

Объекты превратились в агрегаты. Если попытаешься работать с агрегатами через классические таблицы БД, будешь очень огорчён и скажешь, в задницу ваши ДДД и агрегаты туда же со всеми потрохами. Поэтому кто имел неудачный опыт знакомства с ДДД не шибко хорошо отзывались, это понятно.

БД для чтения да. Можно генерить какие угодно срезы. На любой чих. Это конечно избыточно, но зато дешёво и быстро.

Это хорошо не для анализа причинно-следственных вещей (это всего лишь бонус, а подают его иногда как фичу), а хорошо для постоянно и непрерывно меняющихся бизнес-требований. Бизнес он такой, его тащит во все стороны, как подвыпившую девку. И CQRS/ES позволяет быстро и гибко подхватывать на лету эту девку, без лишней бюрократии.


ViPRosОчень узколобая вещь я тебе скажу, а не технология для широкого применения.

Да. На начальном этапе она очень затратная. До первого рабочего результата может пройти не мало времени. Тогда как на EF уже завтра можно херачить CRUD и в продакшен )))
...
Рейтинг: 0 / 0
c# Пример Code First реализовать в через Mapping
    #39442366
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosНу, если бы хотя бы 50 было бы мне :)
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / c# Пример Code First реализовать в через Mapping
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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