开发者

How can I map this navigation property?

I have two collections. The parent has many children, but also stores the most current child's id.

public class Foo 
{
    public int Id { get; set; }
    public ICollection<Bar> Bars { get; set; }

    public int? CurrentBarId { get; set; }

    // adding this causes the error below
    public virtual CurrentBar CurrentBar { get; set; } 
}

public class Bar 
{
    public int Id { get; set; }
    public int FooId { get; set; }
    public virtual Foo Foo { get; set; }
}

When I add the CurrentBarId property everything is persisted correctly. However, when I add the CurrentBar property an exception is thrown when the Bar is created.

I get the exception:

{"Invalid column name 'Foo_Id'."}

How can I map this navigation property in the context?

Update

I have played around with this a bit and ended up with:

modelBuilder.Entity<Foo>()
    .HasOptional(x => x.CurrentBar)
    .WithOptionalDependent()
    .Map(map =>
    {
        map.ToTable("Bar").MapKey("CurrentBarId");
    });

Now I get the following error. Is this in the right direction, or how should I be trying to do this?

error 3034: Problem in mapping fragments starting at lines 213, 442:An entity from one Entity开发者_开发技巧Set is mapped to a row that is also mapped to an entity from another EntitySet with possibly different key. Ensure these two mapping fragments do not map two unrelated EntitySets to two overlapping groups of rows.


Assuming that Foo.Bars and Bar.Foo are the ends of the same relationship and that CurrentBar is one end of a second relationship, I would try this:

modelBuilder.Entity<Foo>()
    .HasMany(f => f.Bars)
    .WithRequired(b => b.Foo)
    .HasForeignKey(b => b.FooId)
    .WillCascadeOnDelete(false);

modelBuilder.Entity<Foo>()
    .HasOptional(f => f.CurrentBar)
    .WithMany()
    .HasForeignKey(f => f.CurrentBarId)
    .WillCascadeOnDelete(false);

This will create a (nullable) CurrentBarId FK column in the Foos table and a (not nullable) FooId FK column in the Bars table.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜