是否可以创建一个 C# 属性,该属性是由实体框架代码第一次迁移获取的其他属性的组合

我想减少为多个对象和关联数据库表中使用的对象属性指定相同属性的重复代码。


我正在使用属性属性来定义属性应该如何保存在数据库中以及它应该如何在 UI 元素中命名。在我的例子中,这个属性出现在多个表/对象中,我希望它在任何地方都具有相同的属性。我还希望实体框架的代码优先迁移能够获取这些属性。看起来代码优先迁移会遍历属性并查找特定类(如 MaxLengthAttribute)或从特定类继承的类。太糟糕了,实体框架不寻找接口。


我不想将此字符串移动到不同的表,因为将使用这些表的客户希望“CustomerNo”直接查询它们。


例如:


[Table("foo")]

public class foo {

   …


   [Column(TypeName="varchar")]

   [MaxLength(15)]

   [Display(Name="Customer Identifier")]

   public string CustomerNo {get; set;}

   …

}


[Table("bar")]

public class bar {

   …


   [Column(TypeName="varchar")]

   [MaxLength(15)]

   [Display(Name="Customer Identifier")]

   public string CustomerNo {get; set;}

   …

}

我想要做的是创建一个自定义属性,将上述属性组合成一个类似 [CustomerNoAttribute] 的属性(我知道我可以省略后缀“Attribute”以减少与 CustomerNo 类的混淆)。


没有多重继承,所以我不能只从 ColumnAttribute、MaxLengthAttribute 和 DisplayAttribute 继承。


有没有办法可以使用组合来完成这项工作?例如


下面的这段代码不起作用。新的内部属性没有附加到我放置 [CustomerNoAttribute] 的属性上。


public CustomerNoAttribute: Attribute {


     public CustomerNoAttribute() {

          new MaxLengthAttribute(15);

          new DisplayAttribute().Name = "Customer Identifier";

          new ColumnAttribute().TypeName = "nvarchar";

     }

}

还有另一种方法可以减少这种重复吗?


使用运行时添加属性的技术无济于事,因为看起来实体框架的代码首先迁移只查看编译时属性。


幕布斯7119047
浏览 148回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP