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

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

Так модель я не допиливал. При перегенерации модели всё остается на своих местах. Это же отдельный partial класс, ёпта.
Йопта, я 2 таких же решения предложил в этом топике. Без частичных классов решений нет. Это баг.
Будем теперь мудрствовать что есть модель ,а где нет?

Увольте нах.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36722991
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж, пипец, решение через хендлинг SavingChanges... Этот цикл будет срабатывать всегда, где надо и где ненадо. Увольтенах за такой код.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36723000
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по тому, что разговор стремительно уходит в сторону, ты уже не отрицаешь, что без дополнительных телодвижений Guid всегда будет '00000000-0000-0000-0000-000000000000'.

Тема исчерпана. Спасибо за советы.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36723424
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Порадовало решение по сабжу :)
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36723512
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36723542
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как решили-то, если не секрет?
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36724071
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инициализировал в конструкторе.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36921087
JOHN_PROFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думал я что-то не так делаю, а у них оказывается бага, т.к. судя по MSDN все должно работать http://msdn.microsoft.com/ru-ru/library/dd283139.aspx
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36921126
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где-то тут на#балово

авторEntity Framework поддерживает формируемые на сервере значения идентификаторов GUID, однако поставщик должен иметь возможность возвращать формируемые сервером значения идентификаторов после вставки строк.Начиная с версии SQL Server 2005, база данных SQL Server может возвращать формируемый сервером тип идентификатора GUID через предложение OUTPUT.Если поставщик не поддерживает эквивалент предложения OUTPUT, то значения GUID для новых объектов нужно формировать на стороне клиента.Для этого рекомендуется обрабатывать событие SavingChanges, чтобы новое значение GUID создавалось для любого объекта сущности в состоянии Added.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36921172
JOHN_PROFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет, все ровно:
авторНачиная с версии SQL Server 2005, база данных SQL Server может возвращать формируемый сервером тип идентификатора GUID через предложение OUTPUT
Т.е. наш поставщик, в моем случае SQL Server 2008 R2, может возвращать формируемый на сервере GUID в EF.
Так что либо бага, либо хз что.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36924545
JOHN_PROFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин... :( Как же можно быть таким не внимательным..... :(
В edmx файле есть два раздела: edmx:StorageModels и edmx:ConceptualModels
Вот в edmx:ConceptualModels стояло свойство annotation:StoreGeneratedPattern="Identity", а в edmx:StorageModels - нет. Как только поставил, так все заработало. Только в edmx:StorageModels надо прописывать без annotation:
Пойду пить йад :(
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36924668
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JOHN_PROFF,

попробуем.
...
Рейтинг: 0 / 0
Guid в Entity FrameWork ASP.NET Dynamic Data
    #36924675
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После рефреша контекста всё вернётся обратно. Даже не сомневаюсь.
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 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]