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 回答