Заранее спасибо за внимание,
Я столкнулся с проблемой в конструкторе 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 не изменять части автоматически сгенерированного кода.
Буду признателен, если кто-то любезно поможет мне с этим вопросом.