SqlMetal генерирует имена ассоциаций мусора - PullRequest
2 голосов
/ 05 мая 2009

Почему SqlMetal портит названия Ассоциации. Например, в моей таблице «TextMessage» у меня есть два столбца, ссылающиеся на таблицу «ApplicationUser». SenderUserId и RecipientUserId

Когда я запускаю SqlMetal и смотрю на мой класс ApplicationUser

Для 'RecipientUserId' генерируется:

[Association(Name="FK__TextMessa__Recip__72910220", Storage="_TextMessages", ThisKey="Id", OtherKey="RecipientUserId", DeleteRule="NO ACTION")]
        public EntitySet<TextMessage> TextMessages
        {
            get
            {
                return this._TextMessages;
            }
            set
            {
                this._TextMessages.Assign(value);
            }
        }

и для 'SenderUserId' он генерирует это свойство с именем мусора:

[Association(Name="FK__TextMessa__Sende__73852659", Storage="__TextMessa__Sende__73852659s", ThisKey="Id", OtherKey="SenderUserId", DeleteRule="NO ACTION")]
        public EntitySet<TextMessage> _TextMessa__Sende__73852659s
        {
            get
            {
                return this.@__TextMessa__Sende__73852659s;
            }
            set
            {
                this.@__TextMessa__Sende__73852659s.Assign(value);
            }
        }

Как я могу это исправить? Это непригодно. Есть ли лучший способ для генерации кода Linq To Sql ???

Ответы [ 2 ]

3 голосов
/ 27 декабря 2011

Генерирует имя на основе внешнего ключа. Назовите свой внешний ключ более понятным, чем автоматически сгенерированное имя. например:

ограничение RecipientMessages FOREIGN KEY (RecipientUserId) ссылается на ApplicationUser (UserId)

1 голос
/ 05 мая 2009

Вы можете указать SqlMetal создать файл DBML:

SqlMetal /server:myserver /database:northwind /dbml:northwind.dbml /namespace:nwind

, а затем исправьте имена ассоциаций в файле DBML и затем сгенерируйте из DBML:

SqlMetal /code:nwind.cs /map:nwind.map northwind.dbml

Единственная проблема с этим заключается в том, что если вы заново сгенерируете DBML после обновления базы данных, любые изменения в вашем DBML будут размыты.

Другие опции:

  • Использовать конструктор Visual Studio (не очень хорошо, если ваша схема большая)
  • Поиск стороннего инструмента для генерации DataContexts
  • Напишите свой собственный инструмент

Еще один момент: я редко видел, чтобы SqlMetal испускал такое плохое название ассоциации. Как называются ваши столбцы? Есть конфликт с другим именем отношения?

...