2009-05-06 98 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表明上述应该是可能的(如果我正确地阅读它)。