1

我有这样的事情:

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

4 回答 4

0

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

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

SecondSomething.Where(x=>x.IsActive).Select(x=>new MyProjection { Name = x.Sth.Name, //others}).ToList(); 
于 2013-02-17T18:39:02.703 回答
0
HasRequired(x => x.sthName)
     .WithMany() //I assume
     .Map(x => x.MapKey("Sth"));
于 2013-02-11T16:20:15.900 回答
0

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

于 2013-02-11T13:51:27.993 回答
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");
    }
}
于 2013-02-12T05:43:10.723 回答