C# 自定义类中Linq到SQL的DeleteOnNull(关联属性)?
是否可以在自定义类上添加“DeleteOnNull=true”,而不是直接修改DBML(生成的)类 例如,假设这是我生成的dbml类的一部分:C# 自定义类中Linq到SQL的DeleteOnNull(关联属性)?,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,是否可以在自定义类上添加“DeleteOnNull=true”,而不是直接修改DBML(生成的)类 例如,假设这是我生成的dbml类的一部分: [Table(Name="OrderDetails")] public partial class OrderDetail : INotifyPropertyChanging, INotifyPropertyChanged { // deleted for brevity [Association(Name="Order
[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;
}
}
我将构建程序集,然后使用示例类来查看它是否具有从分部类设置的属性属性。如果这根本不起作用,那么你可能需要尝试其他方法。可能不支持该类型的属性重叠
你想通过这个实现什么?也许你不需要元数据类型。这是否适用于您的附加部分:
public partial class OrderDetail {
[Association(DeleteOnNull = true)]
public Order Order;
}
…我知道,
Order
本身并没有定义,但您不需要这样构建。建议上述内容应该是可能的(如果我阅读正确)。迟做总比不做好:
如果您一直在使用设计器创建LTS配置和实体,则可以右键单击DBML文件,然后选择“打开方式…”。现在选择XML编辑器并单击OK
在此文件中找到您的
Order\u OrderDetail
关联,然后向其中添加DeleteOnNull=“true”
。保存文件并让LTS为您重新生成类。完成!不再让您对生成的代码文件所做的更改再次被覆盖 基本上,每次我们更改DB模式并重新生成时,都会尽量减少编辑dbml并重新添加DeleteOnNull。因此,我们可以在db开发过程中不断重新生成LtS dbml,并且自定义代码(在本例中为DeleteOnNull)不会受到影响。真倒霉很抱歉,我不知道这个。如果Order不是dbml中的属性生成类,这是可能的。但在我的例子中,OrderDetail与任何其他被拖到设计器中生成代码的表一样。因此,OrderDetail类中的属性顺序也是通过生成而存在的。如果我按照您的建议执行,它将在OrderDetail类中创建属性“Order”的重复声明。Yeh。。当然嗯。。你试过了吗?只是为了验证没有首选项系统(尝试在相同属性上查找有关首选项的文档-未找到任何文档)。关联关键字与system.ComponentModel.DataAnnotations命名空间冲突。这可能会更好:[System.Data.Linq.Mapping.Association(DeleteOnNull=true)]公共秩序;“而不是直接修改DBML(生成的)类?”而不编辑哪个?DBML文件(.DBML)或生成的类(.cs或.vb)?它们是两个不同的东西。我指的是生成部件附带的cs文件。