我在MVC 3应用程序中使用Entity framework 4.1。我有一个实体,我有主键由两列(复合键)组成。并且这在另一个实体中用作外键。如何建立关系?在正常的scnerios我们使用:
public class Category
{
public string CategoryId { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public string CategoryId { get; set; }
public virtual Category Category { get; set; }
}
但是如果类别有两列密钥怎么办?
答案 0 :(得分:137)
您可以使用任何一种流畅的API:
public class Category
{
public int CategoryId1 { get; set; }
public int CategoryId2 { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public int CategoryId1 { get; set; }
public int CategoryId2 { get; set; }
public virtual Category Category { get; set; }
}
public class Context : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Category>()
.HasKey(c => new {c.CategoryId1, c.CategoryId2});
modelBuilder.Entity<Product>()
.HasRequired(p => p.Category)
.WithMany(c => c.Products)
.HasForeignKey(p => new {p.CategoryId1, p.CategoryId2});
}
}
或数据注释:
public class Category
{
[Key, Column(Order = 0)]
public int CategoryId2 { get; set; }
[Key, Column(Order = 1)]
public int CategoryId3 { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
[Key]
public int ProductId { get; set; }
public string Name { get; set; }
[ForeignKey("Category"), Column(Order = 0)]
public int CategoryId2 { get; set; }
[ForeignKey("Category"), Column(Order = 1)]
public int CategoryId3 { get; set; }
public virtual Category Category { get; set; }
}
答案 1 :(得分:16)
我认为最简单的方法是在Navigation属性上使用Data Annotation,如下所示:
@foreach($days_off as $day_off)
<tr>
<td>{{ $day_off->off_type }}</td>
<td>{{ $start = $day_off->off_from }}</td>
<td>{{ $end = $day_off->off_to }}</td>
<td> {{$end->diffInDays(start)}} days off </td>
</tr>
@endforeach
[ForeignKey("CategoryId1, CategoryId2")]