我有这样的事情:
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;}
}
有没有办法实现这个目标?
答案 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();