DeleteOnNull (атрибут Association) для Linq to SQL в пользовательском классе? - PullRequest
4 голосов
/ 06 мая 2009

Можно ли добавить «DeleteOnNull = true» в пользовательский класс вместо непосредственного изменения класса DBML (сгенерированного)?

Например, предположим, что это часть моего сгенерированного класса dbml:

[Table(Name="OrderDetails")]
public partial class OrderDetail : 
       INotifyPropertyChanging, INotifyPropertyChanged
{
    // deleted for brevity

    [Association(Name="Order_OrderDetail", 
         Storage="_Order", ThisKey="OrderId", 
         OtherKey="OrderId", IsForeignKey=true, DeleteOnNull=true)]
    public Order Order 
    {
        get { /* deleted */ }
        set { /* deleted */ }
    }
}

Так можно ли поместить «DeleteOnNull = true» в отдельный класс? Это так? Как? Я безуспешно пробовал следующее:

[MetadataType(typeof(OrderDetailMetadata))]
public partial class OrderDetail {
    internal sealed class OrderDetailMetadata
    {
        [Association(DeleteOnNull = true)]
        public object Order;
    }
}

Ответы [ 3 ]

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

Может быть, вам не нужен тип метаданных. Будет ли это работать в вашем дополнительном выпуске:

public partial class OrderDetail {
    [Association(DeleteOnNull = true)]
    public Order Order;
}

.. я знаю, что само по себе Order не определено, но вам не нужно строить так. Этот документ MSDN предполагает, что вышеупомянутое должно быть возможным (если я читаю это правильно).

1 голос
/ 20 октября 2009

Лучше поздно, чем никогда:

Если вы использовали Designer для создания конфигурации и сущностей LTS, вы можете щелкнуть правой кнопкой мыши файл DBML и выбрать «Открыть с помощью…». Теперь выберите XML Editor и нажмите OK.

Найдите в этом файле свою Order_OrderDetail ассоциацию, затем добавьте к ней DeleteOnNull="true". Сохраните файл и позвольте LTS заново сгенерировать ваши классы для вас. Готово! Больше не нужно, чтобы ваши изменения в сгенерированном файле кода снова перезаписывались!

0 голосов
/ 06 мая 2009

Я бы собрал сборку, а затем использовал отражатель , чтобы на примере класса посмотреть, есть ли у него свойства атрибута, установленные из частичного класса. Если это даже не сработает, возможно, вам придется попробовать что-то еще. Этот тип перекрытия атрибутов может не поддерживаться.

Чего ты хочешь достичь этим?

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