是否有类似主键和辅助键的东西?

时间:2013-02-11 12:53:33

标签: c# sql-server entity-framework ef-code-first primary-key

我有这样的事情:

public class something {
   [Key]
   public int Id {get;set;}
   public string Name {get;set;}
}

public class secondsomething {
   [Key]
   public int Id {get;set;}
   [ForeignKey("Sth") {get;set;}
   public int sthId{get;set;}
   public something Sth{get;set;}
}

我想有这个:

public class something {
   [Key]
   public int Id {get;set;} //keep this as primary key
   public string Name {get;set;} //maybe somehow mark this as a secondary key
}

public class secondsomething {
   [Key]
   public int Id {get;set;}
   [ForeignKey("Sth") {get;set;}
   public string sthName{get;set;} //don't want the id here, but it's name
   public something Sth{get;set;}
}

有没有办法实现这个目标?

4 个答案:

答案 0 :(得分:0)

您可能会发现Code第一个有用的迁移工具是指定花哨的索引要求。 见http://msdn.microsoft.com/en-us/data/jj591621.aspx

答案 1 :(得分:0)

HasRequired(x => x.sthName)
     .WithMany() //I assume
     .Map(x => x.MapKey("Sth"));

答案 2 :(得分:0)

像Gert Arnold所说,没有直接支持在Code First上定义索引,但是如果你使用迁移,你可以直接调用Sql()方法并在那里定义它。这是一个例子:

public partial class AddingUsernameIndexes : DbMigration
{
    public override void Up()
    {
        Sql("CREATE NONCLUSTERED INDEX IX_Applications_Username ON RequestApplications (Username)");
    }

    public override void Down()
    {
        Sql("DROP INDEX IX_Applications_Username");
    }
}

答案 3 :(得分:0)

定义多个键,将[Key]和[Column(x)]属性放在每个键上。

至于想要名称而不是id,我认为不应该在这些模型中。在我看来,这将是一个数据投影,并且将成为您针对这些对象编写的查询的一部分。

SecondSomething.Where(x=>x.IsActive).Select(x=>new MyProjection { Name = x.Sth.Name, //others}).ToList();