2016-05-28 7 views
1

Я пытаюсь определить, что мне говорит EF6, и это не имеет большого значения для меня, поэтому я надеюсь, что кто-то здесь сможет это прояснить.Картирование внешнего ключа Entity Framework

Я настраиваю мой FluentApi как это (составные ключи используются в БД, это код Первая из базы данных):

modelBuilder.Entity<Object1>() 
    .HasKey(e => new { e.Property1, e.Property2 } 
    .HasMany(e => e.Object2s) 
    .WithRequired(e => e.Object1) 
    .HasForeignKey(e => new { e.Property1, e.Property2 }); 

modelBuilder.Entity<Object2>() 
    .HasKey(e => new { e.Property2, e.Property3, e.Property1 }) 
    .HasRequired(e => e.Object1) 
    .WithMany(e => e.Object2s) 
    .HasForeignKey(e => new { e.Property1, e.Property2 }); 

Все строит хорошо, но когда я иду, чтобы выбрать что-нибудь, я получить это:

«ограничение внешнего ключа 'Object1_Object2' из таблицы Объект2 (свойство2, property1) в таблицу Object1 (property1, свойство2) :: Недостаточный отображение: Внешний ключ должен быть отображен в некоторой AssociationSet или EntitySets участ pating во внешнем ключе Ассоциация на концептуальной стороне. "

Идеи? Я не понимаю, почему ограничение FK показывает FK Object2 в неправильном порядке, когда я определил правильный порядок в FluentApi.

+0

http://stackoverflow.com/questions/17204554/foreign-key-must-be-mapped-to-some-associationset-or-entitysets-participating-in – Nab

+0

@Nab Этот вопрос конкретно касается EDMX, а не свободно API. – Eris

+0

@Eris, true - я наткнулся на это и не смог подбирать какую-либо релевантную информацию. – John

ответ

0

атрибут Try:

//using System.ComponentModel.DataAnnotations.Schema 

public class Object1 
{ 

    public int Property1{ get; set; } 
    public string Property2 { get; set; } 

    //Foreign key for Object2 
    public int FK_Object2_Property { get; set; } 

    [ForeignKey("FK_Object2_Property")] 
    public Object2 Object2 { get; set; } 
} 
public class Object2 
{ 

    public int Property1{ get; set; } 
    public string Property2 { get; set; } 

    public ICollection<Object1> Objects { get; set; } 
} 
0

Это в конечном счете то, что я должен был сделать - установить атрибут внешнего ключа и указать порядок столбцов. Code First из БД был Order = 2 и порядок = 0 перепутать, поэтому я изменил его:

public partial class Object2 
{ 
    [Key] 
    [Column("Property2", Order=2)] 
    [ForeignKey("Object1")] 
    public short Property2 { get; set; } 

    [Key] 
    [Column("Property3", Order=1)] 
    public short Property3 { get; set; } 

    [Key] 
    [Column("Property1", Order=0)] 
    [ForeignKey("Object1")] 
    public int Property1 { get; set; } 
} 

Я удалил FluentApi от обоих Object1 и Object2, относящиеся к этому внешнему ключу расположение, и все кажется хорошо. Я повторно сделаю это в FluentApi, как только я определяю, как установить порядок столбцов в FluentApi.

Затем я должен добавить это в свой файл T4 для этого объекта ... конечная цель - восстановить реестр БД до первого кода в любой момент без проблем :) Спасибо за помощь, все!

+0

Я нашел это (https://msdn.microsoft.com/en-us/data/jj819164), в котором показаны некоторые команды для создания ключей с порядками столбцов. – Eris

Смежные вопросы