Вопрос по sql-server, c#, .net, entity-framework – Соотношение между многими и многими со ссылкой на внешний ключ

6

Это должен быть простой вопрос для хорошо осведомленного пользователя EF.

У меня есть следующая схема (в моей голове), как должны выглядеть отношения между таблицами.

[FooBar]      [Foo]          [Bar]

FooId PK,FK   Id PK          Id PK
BarId PK,FK   BarId FK       Name
IsRead        Name           Description
              Description    

Хотя, когда я пытаюсьgenerate схема, использующая код EF, сначала не может интерпретировать отношения между объектами, как я их интерпретировал (добавляет внешний ключFooId к[bar] таблица) и не в состоянии полностью создать[FooBar] Мост стол

Если бы кто-то мог подсказать мне, как реализовать вышеуказанную схему с использованием кода EF4, я был бы очень благодарен. Включает ли решение атрибуты в мои модели POCO, текущие конфигурации или их комбинацию, не имеет большого значения - до тех пор, пока создается желаемая схема базы данных.


POCO Models:

public class Foo
{
    public int Id { get; set; }
    public string Text { get; set; }
    public string Description { get; set; }
    public int BarId { get; set; }

    public Bar Bar { get; set; } /* bar entity */

    public virtual ICollection<Bar> BridgedBars { get; set; }

    public Foo()
    {
        Bars = new List<Bar>();
    }
}

public class Bar
{
    public int Id { get; set; }
    public string Text { get; set; }
    public string Description { get; set; }

    public virtual ICollection<Foo> Foos { get; set; }
    public virtual ICollection<Foo> BridgedFoos { get; set; }

    public Bar()
    {
        Foos = new List<Foo>();
        BridgedFoos = new List<Foo>();
    }
}

public class FooBar
{
    public int FooId { get; set; }
    public int BarId { get; set; }

    public virtual Foo Foo { get; set; }
    public virtual Bar Bar { get; set; }

    public bool IsRead { get; set; }
}
Error: User Rate Limit Exceeded Morten Mertner

Ваш Ответ

1   ответ
8

Error: User Rate Limit ExceededFooIdError: User Rate Limit ExceededBarError: User Rate Limit ExceededFoo.BrideBarsError: User Rate Limit ExceededICollection<Foo>Error: User Rate Limit ExceededBarError: User Rate Limit ExceededtwoError: User Rate Limit ExceededFoo.BrideBarsError: User Rate Limit ExceededBar.FooError: User Rate Limit Exceeded

Error: User Rate Limit ExceededFooBarError: User Rate Limit Exceeded

public class Foo
{
    public int Id { get; set; }
    public string Text { get; set; }
    public string Description { get; set; }

    public int BarId { get; set; }
    public Bar Bar { get; set; }

    public virtual ICollection<FooBar> FooBars { get; set; }
}

public class Bar
{
    public int Id { get; set; }
    public string Text { get; set; }
    public string Description { get; set; }

    public virtual ICollection<Foo> Foos { get; set; }
    public virtual ICollection<FooBar> FooBars { get; set; }

}

public class FooBar
{
    [Key, Column(Order = 0)]
    public int FooId { get; set; }
    [Key, Column(Order = 1)]
    public int BarId { get; set; }

    public virtual Foo Foo { get; set; }
    public virtual Bar Bar { get; set; }

    public bool IsRead { get; set; }
}

Error: User Rate Limit ExceededFooBarError: User Rate Limit ExceededIdError: User Rate Limit ExceededFooBarIdError: User Rate Limit ExceededFooBar.

Error: User Rate Limit ExceededFooError: User Rate Limit ExceededBarError: User Rate Limit Exceeded

modelBuilder.Entity<Foo>()
    .HasRequired(f => f.Bar)
    .WithMany(b => b.Foos)
    .HasForeignKey(f => f.BarId);

modelBuilder.Entity<FooBar>()
    .HasKey(fb => new { fb.FooId, fb.BarId }); // replaces the [Key] annotations

modelBuilder.Entity<FooBar>()
    .HasRequired(fb => fb.Foo)
    .WithMany(f => f.FooBars)
    .HasForeignKey(fb => fb.FooId);

modelBuilder.Entity<FooBar>()
    .HasRequired(fb => fb.Bar)
    .WithMany(b => b.FooBars)
    .HasForeignKey(fb => fb.BarId);

Error: User Rate Limit ExceededFooBarError: User Rate Limit Exceeded

[FooBar]       [Foo]          [Bar]

FooId PK,FK    Id PK          Id PK
BarId PK,FK    BarId FK       Name
IsRead         Name           Description
               Description    

Error: User Rate Limit ExceededFooBarError: User Rate Limit Exceeded

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceededwith payloadError: User Rate Limit ExceededIsReadError: User Rate Limit Exceeded

именно то, что я искал и да, имеющий составной первичный ключ наFooBar было мое намерение - просто забыл упомянуть об этом! Спасибо за отличный ответ и объяснение! как только мой профиль достигает15 points я обязательно вернусь и проголосую. culturalanomoly

Похожие вопросы