0

次のように定義されたコード最初のアプリケーションがあります。

public abstract class Entity
{
    [Key]
    public int Id { get; set; }

    public DateTime CreatedOn { get; set; }
}

public class Post : Entity
{
    public string Text { get; set; }
    public virtual ICollection<UserObject> Likes { get; set; }
} 

public class Blog : Post
{
    public string Title { get; set; }
    public string Content { get; set; }
}

public class Comment : Post
{
    public string Content { get; set; }
    public virtual Post Parent { get; set; }
}

public class UserObject : Entity
{
    public string Username { get; set; }
    public string Login { get; set; }
}

public class Profile : UserObject
{
    public DateTime DoB { get; set; }
    public string Avatar { get; set; }
    public ICollection<Blog> Blogs { get; set; } 
}

アイデアは次のとおりです。プロファイルには多くのブログを含めることができ、投稿 (ブログまたはコメント) には多くのいいね! を付けることができます。データベースに次のようなものが必要です:

テーブルポスト

Id
...

テーブル プロファイル

Id
...

テーブルポストライク

Id
PostId
UserId

テーブル プロフィールブログ

Id
UserId
BlogId

試しましたが、Fluent API でこれらのスキームを生成できません。多対多の関係で試してみましたが、データ構造に継承があるため機能しません。

Fluent API でこれを行う方法は?

4

1 に答える 1

1

これが私のために働いたスキーマです:

流暢なマッピング:

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Profile>()
                .Map(m => m.ToTable("Profiles"));

            modelBuilder.Entity<Post>()
                .HasMany(p => p.Likes)
                .WithMany()
                .Map(m =>
                    {
                        m.ToTable("PostLikes");
                        m.MapLeftKey("PostId");
                        m.MapRightKey("UserId");
                    });

            modelBuilder.Entity<Profile>()
                .HasMany(p => p.Blogs)
                .WithMany()
                .Map(m =>
                {
                    m.ToTable("ProfileBlogs");
                    m.MapLeftKey("UserId");
                    m.MapRightKey("BlogId");
                });
        }

このデータベースを作成しました:

ここに画像の説明を入力

于 2012-09-12T14:49:23.857 に答える