我有一个项目,我在构建Code第一个数据模型时使用了继承。事情是我的所有实体类型都需要一个共同的“上下文id”,表示为字符串:
public class EBaseGenericEntity
{
:
[Index("IX_Cid", IsUnique = true)]
public virtual string Cid { get; set; }
:
}
正如您所看到的,“Cid”属性应始终包含唯一值。问题是:有一个实体类型的'Cid'值不必是唯一的,所以我认为这样可行:
public class EEntityInfo : EBaseGenericEntity
{
:
[Index("IX_Cid", IsUnique = false)]
public override string Cid { get; set; }
:
}
唉,这让实体框架绊倒,抱怨:
类型'EEntityInfo'上的属性'Cid'归因于两个名为'IX_Cid'的IndexAttributes,其中包含冲突的配置: 索引属性属性'IsUnique'='True'与索引属性属性'IsUnique'='False'冲突。
是否无法在EF / CF中覆盖此属性的属性?
编辑:
只是为了确保问题不是关于如何声明IndexAttribute来支持继承(AttributeUsage.Inherited
)我还尝试使用不同的AttributeUsage声明派生版本:
[AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
public class IndexedAttribute : IndexAttribute
{
public IndexedAttribute(string name)
: base(name)
{
}
}
然后使用它而不是'普通'IndexAttribute:
public class EBaseGenericEntity
{
:
[Indexed("IX_Cid", IsUnique = true)]
public virtual string Cid { get; set; }
:
}
public class EEntityInfo : EBaseGenericEntity
{
:
[Indexed("IX_Cid", IsUnique = false)]
public override string Cid { get; set; }
:
}
然而这并没有帮助。我觉得奇怪的是EF尽管有(不可继承的)用法,但仍可以找到Indexed自定义属性。派生的自定义属性是否也无法覆盖其AttributeUsage?
答案 0 :(得分:0)
这是不可能的。因为只有一个实体有这个问题,我建议:
EEntityInfo
您还可以定义包含Cid的界面,以便在需要时可以使用不同类型的通用语法。