在自定义类中Linq to SQL的DeleteOnNull(关联属性)?

时间:2009-05-06 14:02:31

标签: c# linq linq-to-sql

是否可以在自定义类上添加“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 个答案:

答案 0 :(得分:1)

也许你不需要MetaData类型。这是否适用于您的其他部分内容:

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

..我知道单独Order没有定义,但你不应该像那样构建。 This MSDN doc表明上述内容应该是可能的(如果我正确阅读的话)。

答案 1 :(得分:1)

迟到总比没有好:

如果您一直使用Designer创建LTS配置和实体,则可以右键单击DBML文件,然后选择“打开方式...”。现在选择XML Editor并单击OK。

在此文件中找到您的Order_OrderDetail关联,然后向其中添加DeleteOnNull="true"。保存文件,让LTS为您重新生成课程。完成!再也不会对生成的代码文件进行更改了!

答案 2 :(得分:0)

我构建程序集然后使用reflector来示例该类,以查看它是否具有从partial类设置的属性属性。如果这甚至不起作用那么你可能需要尝试别的东西。可能不支持该类型的属性重叠。

你想通过这个来实现什么目标?