Как предотвратить linq-to-sql дизайнер отменить мои изменения - PullRequest
1 голос
/ 16 июня 2010

Заранее спасибо за внимание,

Я столкнулся с проблемой в конструкторе LINQ-2-SQL в VS 2008 с пакетом обновления 1 (SP1), что сделало меня СУМАСШЕДШИМ. Я использую Linq2sql в качестве моего DAL. Похоже, что Linq2sql ускоряет кодирование на первом этапе, но возникает множество проблем, связанных с наследованием таблиц или объектов.

В этом случае у меня есть класс Entity, от которого наследуются все другие классы сущностей, сгенерированные конструктором Linq2sql.

public abstract class Entity
{
    public virtual Guid ID { get; protected set; }
}

public partial class User : monius.Data.Entity
{
}

И следующее, сгенерированное дизайнером L2S (DataModel.designer.cs)

[Column(Storage = "_ID", AutoSync = AutoSync.OnInsert, DbType = "UniqueIdentifier NOT NULL", 
IsPrimaryKey = true, IsDbGenerated = true, UpdateCheck = UpdateCheck.Never)]
[DataMember(Order = 1)]
public System.Guid ID
{
    get
    {
        return this._ID;
    }
    set
    {
        if ((this._ID != value))
        {
            this.OnIDChanging(value);
            this.SendPropertyChanging();
            this._ID = value;
            this.SendPropertyChanged("ID");
            this.OnIDChanged();
        }
    }
}

Когда я компилирую код, VS предупреждает меня, что

Предупреждение 1 User.ID скрывает унаследованный элемент Entity.ID. Чтобы текущий член переопределил это дополнение, добавьте ключевое слово override. В противном случае добавьте новое ключевое слово.

Это предупреждение очевидно, и я должен изменить код, сгенерированный конструктором L2S (DataModel.designer.cs), на

[…]
public override System.Guid ID
{
…
    protected set
…
}

И код скомпилирован без ошибок и предупреждений, и все довольны. Но это не конец истории. Как только я внес изменения в объекты диаграммы (dbml) или даже открыл файл dbml, чтобы просмотреть его, любые изменения, внесенные мной в конструктор вручную, исчезли, и POOF! Верните СНОВА. Это болезненная работа.

Теперь мне интересно, есть ли способ заставить дизайнера L2S не изменять части автоматически сгенерированного кода.

Буду признателен, если кто-то любезно поможет мне с этим вопросом.

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Я полагаю, что спрашивающий уже преодолел проблему. Но я добавлю ответ для блага других, которые, как и я, погуглили свой путь к этому посту.

Если вам нужно модификатор override в сгенерированном свойстве linqToSql;

1) open the dbml
2) right click and select properties on the Property you wish to add the override (or virtual, new or new virtual) keyword
3) change the Inheritance Modifier property to what you desire.
0 голосов
/ 17 июня 2010

Если все, что делает ваш базовый класс:

public abstract class Entity 
{ 
    public virtual Guid ID { get; protected set; } 
}

... тогда почему бы не сделать его интерфейсом вместо этого?

В качестве альтернативы, вы можете захотеть использовать T4 Damien Guard.шаблоны для настройки вывода генератора кода: http://l2st4.codeplex.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...