C# EF One-To-Many dataGrid

Fórumok

Üdv!

Adott két tábla a minta alapján:

https://learn.microsoft.com/en-us/ef/core/modeling/relationships/one-to…

// classes .cs
public class Blog
{
    public int Id { get; set; }
    public string Title { get; set; }
    public ICollection<Post> Posts { get; } = new List<Post>(); // Collection navigation containing dependents
}

public class Post
{
    public int Id { get; set; }
    public string Entry { get; set; }
    public int BlogId { get; set; }   // foreign key
    public Blog Blog { get; set; }
}


// repository .cs
public List<Post> GetPosts()
        {
            return Context.Posts.ToList();
        }

// wpf windows .cs

            posts = PostsRepository.GetPosts();
            dataGrid.DataContext = post;

A post-ok lekérdezésekor ( GetPosts() )  szeretném visszakapni a Blog mező értékeit is (Title).

A dataGrid-ben szépen ott vannak a mezők, de a Blog egy objektum. A Blog.Title mező kellene.

Mi hiányzik?

ez is bent van a dbcontext-ben (itt hibát ír):

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .HasMany(e => e.Posts)            # <--- lambda expression: CS1660: cannot convert lambda expression to type string because it is not a delegate type
        .WithOne(e => e.Blog)
        .HasForeignKey(e => e.BlogId)
        .IsRequired();
}

Hozzászólások

A dataGrid-ben szépen ott vannak a mezők, de a Blog egy objektum. A Blog.Title mező kellene.

WPF-et, Datagridet, stb. tovabbra sem ismerem, de ha csinalsz a Post-ban egy read-only property-t, ami visszaadja a Blog.Title-t, az mukodhet esetleg?

ez is bent van a dbcontext-ben (itt hibát ír):

Az OnModelCreating lehet, hogy elhagyhato, ha nem irsz felul semmit a convention-based discovery szabalyaihoz kepest: https://learn.microsoft.com/en-us/ef/core/modeling/relationships/conven…

Egyik lehetőség, ami működött:

<DataGrid x:Name="dataGrid" ItemsSource="{Binding}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Title" Binding="{Binding Blog.Title}" />
            </DataGrid.Columns>
</DataGrid>

Ez jó lehet a linkről, köszi!

public class Blog
{
    // Not discovered as reference navigations:
    public int Id { get; set; }
    public string Title { get; set; } = null!;
    public Uri? Uri { get; set; }
    public ConsoleKeyInfo ConsoleKeyInfo { get; set; }
    public Author DefaultAuthor => new() { Name = $"Author of the blog {Title}" };

    // Discovered as a reference navigation:
    public Author? Author { get; private set; }
}

public class Author
{
    // Not discovered as reference navigations:
    public Guid Id { get; set; }
    public string Name { get; set; } = null!;
    public int BlogId { get; set; }

    // Discovered as a reference navigation:
    public Blog Blog { get; init; } = null!;
}