powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Покритикуйте EF code-first
20 сообщений из 245, страница 10 из 10
Покритикуйте EF code-first
    #38986252
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosесть и нормальные системы

вот что удивительно, нормальные системы уже много лет успешно юзают REST/API, при этом клиенты не имеют ни малейшего понятия, как эти данные там храняться, SQL, noSQL или вообще в текстовых файлах разложены, всем плевать, люди бизнес делают, бабки текут рекой, все счастливы и довольны.

но нет же. это всё ненормальные системы. нормальные системы не должны быть лёгкими и простыми. они должны быть как большая куча УГ, пипец какими сложными, чтобы отдельные очкарики имели возможность быть незаменимыми и до пенсии получать свою вожделенную зарплату.

хотя, ничего против этого не имею. каждому своё. только про "нормальность" систем мне не затирай плз. чай не вчера родился, и не в одной/двух конторках просидел со студенчества. повидал всякого, уж поверь мне.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38986261
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttчай не вчера родился, и не в одной/двух конторках просидел со студенчества. повидал всякого, уж поверь мне.
Но щас-то ты на нормальном месте - всё по феншую делаете?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38986370
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Но щас-то ты на нормальном месте - всё по феншую делаете?

всегда есть над чем работать и чему поучиться, идеал недостижим
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989375
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А подскажите насчёт такой ситуации. Вот есть модель со свойством, которое надо представить в БД - коллекция. В БД коллекций нет. Предлагают отобразить коллекцию в строку:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public string Values_Internal { get; set; }

[NotMapped]
public List<double> Values
{
	get
	{
		var values =
			Values_Internal
			.Split(';')
			.Select(val => double.Parse(val))
			.ToList();

		return values;
	}

	set
	{
		Values_Internal = string.Join(";", value);
	}
}



Хочу, чтобы пользователь-программист этого класса не вызывал свойство Values_Internal - оно не должно мозолить ему глаза. Оно только запутывает. Программист не должен и ему не интересно знать, как там внутри модель устроена, зачем нужно два свойства с похожими названиями и какие костыли решают какие проблемы. Вот и хотелось бы скрыть это свойство из выдачи IntelliSense. Как сделать?

Ну и стоит ли это делать вообще? Т. е. это нормально, что пользователь класса видит кучу похожих свойств и ему надо лазить внутрь класса или читать документацию на него, чтобы разобраться, какое свойство ему нужно?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989377
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле, что написал я XML-комментарий "For internal use only." для этого свойства. А толку? Лучше бы оно изначально пользователю глаза не мозолило - выкинуть его из выдачи Интеллисенсом вообще.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989381
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл такой костыль http://www.codeproject.com/Tips/828444/Property-Mapping-in-Entity-Framework-Code-First

авторThe nonpublic properties must be mapped using the Fluent API configuration.

Т. е. только делать свойство приватным, а потом флюэнтом его мапить? Проще никак?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989385
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989421
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Хочу, чтобы пользователь-программист этого класса не вызывал свойство Values_Internal - оно не должно мозолить ему глаза. Оно только запутывает. Программист не должен и ему не интересно знать, как там внутри модель устроена, зачем нужно два свойства с похожими названиями и какие костыли решают какие проблемы. Вот и хотелось бы скрыть это свойство из выдачи IntelliSense. Как сделать?
EditorBrowsableAttribute
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989477
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikAlexey2112Хочу, чтобы пользователь-программист этого класса не вызывал свойство Values_Internal - оно не должно мозолить ему глаза. Оно только запутывает. Программист не должен и ему не интересно знать, как там внутри модель устроена, зачем нужно два свойства с похожими названиями и какие костыли решают какие проблемы. Вот и хотелось бы скрыть это свойство из выдачи IntelliSense. Как сделать?
EditorBrowsableAttribute
Во, спасибо! Это как раз то, что нужно, чтобы не заморачиться со всякими самописными конвенциями, выражениями и прочими флюэнтами.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989654
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ляя! Я уже начинаю ненавидеть этот code first! Фак зис щит!

Каскадное удаление - это так же нужно и обычно, как и первичный и внешний ключи. Почему каскадное удаление не сделать без многословного флюэнта? Почему вообще логику построения БД в code first надо размызывать не только по классам POCO, но и ещё по всяким методам всяких контекстов, самописных конвенций и прочих поведений даже в простых случаях ?!
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989658
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тэкс... Вот ситуация как по ссылке - отношение 1-1..0. Если я поставлю первичному ключу (который одновременно и внешний) в таблице-потомке атрибут Required, то каскадное удаление будет работать?

Я думал, что раз свойство обозначено как первичный ключ, то оно Required по умолчанию.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989672
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Тэкс... Вот ситуация как по ссылке - отношение 1-1..0. Если я поставлю первичному ключу (который одновременно и внешний) в таблице-потомке атрибут Required, то каскадное удаление будет работать?

Я думал, что раз свойство обозначено как первичный ключ, то оно Required по умолчанию.
Правда, после Required это будет уже не 1-1..0, а 1-1.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989699
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Alexey2112Тэкс... Вот ситуация как по ссылке - отношение 1-1..0. Если я поставлю первичному ключу (который одновременно и внешний) в таблице-потомке атрибут Required, то каскадное удаление будет работать?

Я думал, что раз свойство обозначено как первичный ключ, то оно Required по умолчанию.
Правда, после Required это будет уже не 1-1..0, а 1-1.
Вот у меня стоит в миграции nullable:false. Стоят атрибуты Key и ForeignKey. Тут написано

авторIf a foreign key on the dependent entity is not nullable, then Code First sets cascade delete on the relationship.

Ну, я сделал всё по конвенциям. А каскадного удаления нет - пишет "Конфликт инструкции DELETE с ограничением REFERENCE". Чего ему ещё надо?

Добавляю атрибут Required - миграция его не видит. Добавление атрибута - это не зименение модели? Да и что в миграции написать, если и так уже в инициальной миграции стоит на внешнем ключе

TestId = c.Int(nullable: false),

?

Ничего не понял с этим CF. Помню только, что когда флюэнтом добавлял - каскадное удаление работало. А когда на атрибутах переделал - фигвам.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989701
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удаляю запись, кстати, так

Код: c#
1.
2.
3.
4.
                    var t = db.Tests.First();
                    db.Tests.Remove(t);

                    db.SaveChanges();
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989722
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, похоже, без флюэнта каскадное удаление не сделать.

Хвост, ты как каскадное удаление делаешь? Своё соглашение пишешь, или у тебя и так всё работает? Вон, на SO у людей не работает без флюэнта, как и у меня.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989771
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Было

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class Test
{
    public int TestId { get; set; }

    public virtual CommonSettings CommonSettings { get; set; }
}

public class CommonSettings
{
    [Key, ForeignKey("Test")]
    public int TestId { get; set; }
    public virtual Test Test { get; set; }
}

// Configure TestId as FK for CommonSettings
modelBuilder.Entity<Test>()
	.HasOptional(e => e.CommonSettings) // Mark CommonSettings is optional for Test
	.WithRequired(ad => ad.Test) // Create inverse relationship 
	.WillCascadeOnDelete(true);



Стало (добавил атрибут Required, удалил флюэнт-вставку

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class Test
{
    public int TestId { get; set; }

    public virtual CommonSettings CommonSettings { get; set; }
}

public class CommonSettings
{
    [Key, ForeignKey("Test"), Required]
    public int TestId { get; set; }
    public virtual Test Test { get; set; }
}



Получилась миграция

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public override void Up()
{
    DropForeignKey("dbo.CommonSettings", "TestId", "dbo.Test");
    AddForeignKey("dbo.CommonSettings", "TestId", "dbo.Test", "TestId");
}

public override void Down()
{
    DropForeignKey("dbo.CommonSettings", "TestId", "dbo.Test");
    AddForeignKey("dbo.CommonSettings", "TestId", "dbo.Test", "TestId", cascadeDelete: true);
}



Эти в EF CF совсем там упоролись, чтоли?
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989772
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, без флюэнта всё через жопу даже в простых случаях.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38989962
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, так и есть. Думал, это я с миграциями напутал. Создал новую БД с упрощённой схемой - только две таблицы со связью 1-1..0. Ну и без флюэнта связь без каскадоного удаления создалась даже по такому сочетанию атрибутов на внешнем ключе

Код: c#
1.
[Key, ForeignKey("Test"), Required]



А с флюэнтом создалось как надо, вне зависимости от наличия/отсутствия атрибута Required (получается, что он тут лишний вообще).

Вобщем, для себя сделал такой вывод - без Fluent API невозможно сделать даже относительно простую базу данных в EF CF. Даже каскадное правило удаления для отношений 1-1 или 1-1..0 атрибутами и конвенциями из коробки не сделать. Так что не знаю, чего там Хвост одними изкоробочными вещами обходится. Ну либо он просто не делал БД с такими отношениями и с каскадными удаления в CF и без флюэнта.
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38990071
Alexey2112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, никто сюда не заходит...
...
Рейтинг: 0 / 0
Покритикуйте EF code-first
    #38990077
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey2112Эх, никто сюда не заходит...нет-нет, не переживай, мы тебя внимательно слушаем ))
...
Рейтинг: 0 / 0
20 сообщений из 245, страница 10 из 10
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Покритикуйте EF code-first
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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