Entity Framework отношения один-к-одному - PullRequest
0 голосов
/ 01 июня 2011

У меня есть следующее представление

vw_Resources
-> ResourceId
-> Name
-> ReportsTo (maps to ResourceId)

и класс

public class Resource
{
     public int ResourceId{get;set;}
     public string Name{get;set;}
     public Resource ReportsTo{get;set;}
}

и DbContext

public class MyContext
{
     public DbSet<Resource> Resources { get; set; }
}

Как мне сопоставить ReportsTo, чтобыDbContext возвращает объект Resource.Я должен сделать это в следующем методе в классе DbContext, используя ModelBinder

protected override void OnModelCreating(DbModelBuilder modelBuilder)

Ответы [ 3 ]

1 голос
/ 01 июня 2011

Сработало следующее отображение

modelBuilder.Entity<Resource>().HasRequired(r => r.ReportsTo).WithMany().Map(r => r.MapKey("ReportsTo"));
0 голосов
/ 01 июня 2011

Вы не можете самостоятельно ссылаться на отношение «один к одному», потому что ResourceId - ваш ПК.Если вы сделаете также FK, вы скажете, что зависимый Resource связан с основным ресурсом с тем же ResourceId, но это не может быть, потому что ResourceId должен быть уникальным.Самостоятельная ссылка «один-к-одному» вообще невозможна в EF, потому что EF не поддерживает уникальные не первичные ключи.

0 голосов
/ 01 июня 2011

измените свою сущность следующим образом

public class Resource
{
     public int ResourceId{get;set;}
     public string Name{get;set;}
     public int? ReportsToId{get;set;}
     public Resource ReportsTo{get;set;}
     public ICollection<Resource> Reporters{get;set;}
}

тогда отображение как

        modelBuilder.Entity<Resource>().HasOptional(r => r.ReportsTo)
            .WithMany(r => r.Reporters)
            .HasForeignKey(r => r.ReportsToId);
...