我想减少为在多个对象和关联的数据库表中使用的对象属性指定相同属性的重复代码。
我正在使用属性属性来定义属性应如何保存在数据库中以及应如何在UI元素中命名。就我而言,此属性出现在多个表/对象中,我希望它在所有位置都具有相同的属性。我还希望这些属性能被实体框架的代码优先迁移所吸收。看起来像代码优先迁移遍历属性,并寻找诸如MaxLengthAttribute的特定类或从特定类继承的类。太糟糕了,Entity Framework不查找接口。
我不想将此字符串移动到另一个表,因为将使用这些表的客户希望直接通过“ 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;}
…
}
Run Code Online (Sandbox Code Playgroud)
我想做的是创建一个自定义属性,将上述属性组合成一个类似[CustomerNoAttribute]的属性(我知道我可以省略后缀“ Attribute”,以减少类CustomerNo的混淆)。
没有多重继承,所以我不能仅继承ColumnAttribute,MaxLengthAttribute和DisplayAttribute。
有什么方法可以使用合成来完成这项工作吗?例如
下面的代码不起作用。新的内部属性未附加到我放置[CustomerNoAttribute]的属性上。
public CustomerNoAttribute: Attribute {
public CustomerNoAttribute() {
new MaxLengthAttribute(15);
new DisplayAttribute().Name = "Customer Identifier";
new ColumnAttribute().TypeName = "nvarchar";
}
}
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以减少这种重复吗?
使用运行时属性添加的技术无济于事,因为看起来实体框架的代码优先迁移仅关注编译时属性。