代码之家  ›  专栏  ›  技术社区  ›  Johannes Setiabudi

自定义类中linq to sql的deleteonnull(关联属性)?

  •  4
  • Johannes Setiabudi  · 技术社区  · 15 年前

    是否可以在自定义类上添加“deleteonnull=true”,而不是直接修改dbml(generated)类?

    例如,假设这是我生成的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 回复  |  直到 15 年前
        1
  •  1
  •   Funka    15 年前

    迟做总比不做好:

    如果使用设计器创建LTS配置和实体,可以右键单击DBML文件,然后选择“打开方式…”。现在选择XML编辑器并单击确定。

    找到你 Order_OrderDetail 在此文件中关联,然后添加 DeleteOnNull="true" 对它。保存文件,让LTS为您重新生成类。完成!不再覆盖对生成的代码文件所做的更改!

        2
  •  1
  •   Matt Kocaj    15 年前

    也许你不需要元数据类型。这是否适用于您的附加部分:

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

    …我自己就知道 Order 没有定义,但您不需要这样构建。 This MSDN doc 建议以上内容应该是可能的(如果我读得正确的话)。

        3
  •  0
  •   Matt Kocaj    15 年前

    我会建造这个组件然后使用 reflector 以类为例,查看它是否具有从分部类设置的属性属性。如果这一点都不起作用,那么您可能需要尝试其他方法。可能不支持这种类型的属性重叠。

    你想通过这个达到什么目的?