powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Guid в Entity FrameWork ASP.NET Dynamic Data
25 сообщений из 38, страница 1 из 2
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36720539
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть поле, первичный ключ Guid.

Код: plaintext
private global::System.Guid _ID

Использую ASP.NET Dynamic Data, которая сама добавляет записи.

Guid всегда нулевой по дефолту.

Выход, дописывать в дизайнере модели:

Код: plaintext
private global::System.Guid _ID = Guid.NewGuid();

Но это не удобно, т.к. при обновлении модели приходится поправлять снова.

Пробовал OnIDChanging - не помогает. Какие будут предложения?
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36720634
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил таким вот выпердом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 public partial class MyaEntities
    {
        partial void OnContextCreated()
        {
            this.SavingChanges += new System.EventHandler(mySavingChanges);
        }
        public void mySavingChanges(object sender, System.EventArgs e)
        {
            var osm = this.ObjectStateManager;
            foreach (var entry in osm.GetObjectStateEntries(EntityState.Added))
            {
                if (entry.Entity is SomeEntity)
                {
                    var s= (SomeEntity)entry.Entity;
                    s.ID = Guid.NewGuid();
                }
            }

        }

    }
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722658
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей, а если в отруливать этим в отдельном partial классе, как это принято в DD?

Ну что-то типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
[MetadataType(typeof(TitlesMetadataType))]
public partial class Titles
{
    public Titles()
    {
        Id = Guid.NewGuid();
    }
}

public partial class TitlesMetadataType
{
    [ScaffoldColumn(false)]
    public Guid Id { get; set; }
}
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722724
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, я, кажется, понял Вашу ошибку. Вы забыли в БД поставить первичный ключ для Guid _ID. Тогда модель будет генерить правильный инсерт.
Так же не забудьте указать ScaffoldColumn для Guid _ID.

P.S. Хендлинг общего SavingChanges контекста очень нехорошее решение...
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722789
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАндрей, а если в отруливать этим в отдельном partial классе, как это принято в DD?
Да, с Конструктором тоже вариант. Тут я не дотумкал.
OnIDChanging - не помогает, это я уже писал.
МСУХотя, я, кажется, понял Вашу ошибку. Вы забыли в БД поставить первичный ключ для Guid _ID. Тогда модель будет генерить правильный инсерт.


ну мы тут тоже не щи лаптем хлебаем.

МСУТак же не забудьте указать ScaffoldColumn для Guid _ID.


[ScaffoldColumn(false)] - не руками же я их буду вбивать )

МСУP.S. Хендлинг общего SavingChanges контекста очень нехорошее решение...
Why not?
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722803
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже это косяк ScaffoldColumn-а. Надо будет у авторов уточнить.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722822
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScaffoldColumn "вбивается" руками и только ими.
Во-вторых, это не косяк ScaffoldColumn, а косяк Ваш. Вы забыли указать первичный ключ, в результате чего получили кривую модель.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722882
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУScaffoldColumn "вбивается" руками и только ими.
Во-вторых, это не косяк ScaffoldColumn, а косяк Ваш. Вы забыли указать первичный ключ, в результате чего получили кривую модель.
никуя не понял.
Я указал [ScaffoldColumn(false)]. Мне нах этой гуид не сдался для редактирования.
Где я забыл указать первичный ключ? В БД что-ли? Я ж не совсем ламер.
И почему внешние ключи в "кривой модели" чудесно работают?
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722909
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

или ты хочешь сказать, что указав поле в БД как Первичный ключ, в Модели получим

Код: plaintext
private global::System.Guid _ID = Guid.NewGuid();
вместо
Код: plaintext
private global::System.Guid _ID
?
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722910
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredЯ указал [ScaffoldColumn(false)]. Мне нах этой гуид не сдался для редактирования.
Всё правильно. При false его не будет. Ну так и где тут косяк с ScaffoldColumn?
buredГде я забыл указать первичный ключ? В БД что-ли? Я ж не совсем ламер.
Все могут что-то забыть, это свойственно человеку.
buredИ почему внешние ключи в "кривой модели" чудесно работают?
И почему у меня гуиды сами генерятся в DD, без педалей?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE [dbo].[Titles](
	[Id] [uniqueidentifier] ROWGUIDCOL  NOT NULL CONSTRAINT [DF_Titles_Id]  DEFAULT (newid()),
	[Title] [nvarchar]( 50 ) COLLATE Cyrillic_General_CI_AS NOT NULL,
CONSTRAINT [PK_Titles] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
namespace ...
{
    [MetadataType(typeof(TitlesMetadataType))]
    public partial class Titles
    {
       
    }

    public partial class TitlesMetadataType
    {
        [ScaffoldColumn(false)]
        public Guid Id { get; set; }
    }
}

Profiler trace
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
exec sp_reset_connection 
go
exec sp_executesql N'insert [dbo].[Titles]([Id], [Title])
values (@0, @1)
',N'@0 uniqueidentifier,@1 nvarchar(50)',@ 0 ='00000000-0000-0000-0000-000000000000',@ 1 =N'bured подзатупил :) бывает...'
go
exec sp_reset_connection 
go
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722916
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дак он всегда @0='00000000-0000-0000-0000-000000000000' и будет!
Я ж про это в первом посте писал!

херасе подзатупил
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722922
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredМСУ,

или ты хочешь сказать, что указав поле в БД как Первичный ключ, в Модели получим

Код: plaintext
private global::System.Guid _ID = Guid.NewGuid();
вместо
Код: plaintext
private global::System.Guid _ID
?



Вы действительно не понимаете нужность первичных ключей в DD? Тогда Вам в ясли

P.S. Если не указать первичный ключ, Dynamic Data будет требовать маппинга в DefiningQuery или маппинга хранимых процедур в Insert, Update, Delete модели.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722923
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredДак он всегда @0='00000000-0000-0000-0000-000000000000' и будет!
Я ж про это в первом посте писал!

херасе подзатупил

Глаза отказываются видеть

Код: plaintext
DEFAULT (newid())

?
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722926
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

ну чего там, вторую запись уже добавил?
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722928
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredМСУ, ну чего там, вторую запись уже добавил?
Не понял.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722932
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ты глянь в базу: какой гуидик вставился, не '00000000-0000-0000-0000-000000000000' случаем?
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722935
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredа ты глянь в базу: какой гуидик вставился, не '00000000-0000-0000-0000-000000000000' случаем?
Нет, гуиды же генерит серв.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722937
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

но судя по профайлеру всё-таки '00000000-0000-0000-0000-000000000000'
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722945
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вот хорошая новость - он таким будет всегда, если не допиливать руками модель.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722953
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredИ вот хорошая новость - он таким будет всегда, если не допиливать руками модель.
?
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722957
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredИ вот хорошая новость - он таким будет всегда, если не допиливать руками модель.

[MetadataType(typeof(TitlesMetadataType))]
public partial class Titles
{
public Titles()
{
>>>Id = Guid.NewGuid();<<<
}
}

public partial class TitlesMetadataType
{
[ScaffoldColumn(false)]
public Guid Id { get; set; }
}

P.S. Каким-то случайным образом удалил я конструктор и запостил левую трассу профайлера. Сорри.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722958
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ ?
расскажи подробнее
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722960
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredИ вот хорошая новость - он таким будет всегда, если не допиливать руками модель.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
[MetadataType(typeof(TitlesMetadataType))]
public partial class Titles
{
    public Titles()
    {
        Id = Guid.NewGuid();
    }
}

public partial class TitlesMetadataType
{
    [ScaffoldColumn(false)]
    public Guid Id { get; set; }
}

P.S. Каким-то случайным образом удалил я конструктор и запостил левую трассу профайлера. Сорри.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722964
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

ну я про это и говорю. Если не допиливать модель, он всегда и будет '00000000-0000-0000-0000-000000000000'
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722974
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredМСУ,

ну я про это и говорю. Если не допиливать модель, он всегда и будет '00000000-0000-0000-0000-000000000000'

Так модель я не допиливал. При перегенерации модели всё остается на своих местах. Это же отдельный partial класс, ёпта.
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Guid в Entity FrameWork ASP.NET Dynamic Data
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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