2009-05-06 57 views
4

是否可以在自定義類中添加「DeleteOnNull = true」而不是直接修改DBML(生成的)類?定製類中Linq to SQL的DeleteOnNull(關聯屬性)?

例如,讓我們說,這是我所產生的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 =真」在一個單獨的類?是嗎?怎麼樣?我曾嘗試以下沒有任何的運氣:

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

「而不是直接修改DBML(生成)類?」沒有編輯哪一個? DBML文件(.dbml)或生成的類(.cs或.vb)?他們是兩件不同的事情。 – Lucas 2009-05-18 14:35:38

+0

我的意思是一代產品附帶的cs文件。 – 2009-05-19 19:24:20

回答

1

末知足者常樂從未:

如果你已經使用設計器創建您的LTS的配置和實體,您可以在DBML文件上單擊右鍵,選擇「打開方式」。現在選擇XML Editor並單擊OK。

查找該文件您Order_OrderDetail協會,再加入DeleteOnNull="true"它。保存文件並讓LTS爲您重新生成您的課程。完成!不再需要對生成的代碼文件進行更改!

0

我建立組裝,然後使用reflector示例類,看它是否有從局部類設置屬性的屬性。如果這樣甚至不起作用,那麼你可能需要嘗試其他的東西。該類型的屬性重疊可能不受支持。

它是什麼你想達到通過這個?

+0

基本上試圖最小化保持編輯dbml並每次重新添加DeleteOnNull我們改變數據庫模式並重新生成。所以我們可以在db開發過程中不斷重新生成LtS dbml,並且自定義代碼(本例中爲DeleteOnNull)不會受到影響。 – 2009-05-06 19:16:39

1

也許你不需要的元數據類型。將這項工作在你的其他部分:

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

..我知道,本身Order沒有定義,但你不應該需要建立這樣的。 This MSDN doc表明上述應該是可能的(如果我正確地閱讀它)。