在代码优先迁移中将通用类'属性传递给ColumnAttribute

时间:2013-06-04 04:55:00

标签: entity-framework ef-code-first poco dbcontext

我有一个在3个POCO对象中继承的抽象类:

public abstract class BaseObject
{
    public virtual int Id { get; set; }
}

public class Post : BaseObject
{
    public string Name { get; set; }

    public virtual ICollection<PostCategory> PostCategory { get; set; }
}

public class Category : BaseObject
{
    public string Name { get; set; }

    public virtual ICollection<PostCategory> PostCategory { get; set; }
}

public class PostCategory
{
    [Key]
    [Column("Id", Order = 0)]
    public int PostId { get; set; }

    [Key]
    [Column("Id", Order = 1)]
    public int CategoryId { get; set; }

    public string Value { get; set; }

    public virtual Post Post { get; set; }
    public virtual Category Category { get; set; }
}

但是,每当我在Package Manager Console中执行'add-migration'时,我都会收到错误:

  

指定的架构无效。错误:(30,6):错误0019:每个   类型中的属性名称必须是唯一的。物业名称'Id'已经存在   定义

基本上抱怨ColumnAttributeId对象中具有相同的属性名称(PostCategory属性)。

我需要属性名称与创建泛型Repo类中使用的泛型类相同。这就是我在抽象课中拥有Id的原因。但是,这给了我CF迁移部分的错误。有办法解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

ColumnAttribute属性设置SQL Server中生成的名称。显然,Id列无法生成两次。

只需删除ColumnAttribute,即可让服务器安静地生成PostCategory表。