SQL类型提供程序无法正常工作以实现多对多关系

时间:2015-05-16 21:59:45

标签: entity-framework f# ef-code-first

我试图在F#中使用SqlDataConnection类型提供程序来访问我使用C#中定义的实体框架代码第一模型创建的数据库。

public class Tag
{
    [Required]
    public int TagId { get; set; }
    [Required]
    public string Name { get; set; }

    public virtual ICollection<Bookmark> TagBMs { get; set; }

    public Tag()
    {
        TagBMs = new HashSet<Bookmark>();
    }
}

public class Bookmark
{
    [Required]
    public int BookmarkId { get; set; }
    [Required]
    public string Url { get; set; }
    [Required]
    public DateTime DateAdded { get; set; }

    public virtual ICollection<Tag> BMTags { get; set; }

    public Bookmark()
    {
        BMTags = new HashSet<Tag>();
    }
}

public class BookmarksContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder builder)
    {
        builder.Entity<Bookmark>().HasMany(b => b.BMTags).WithMany(t => t.TagBMs).Map(cs =>
            {
                cs.MapLeftKey("TagId");
                cs.MapRightKey("BookmarkId");
                cs.ToTable("BookmarkTag");
            });

        base.OnModelCreating(builder);
    }

    public DbSet<Bookmark> Bookmarks { get; set; }
    public DbSet<Tag> Tags { get; set; }
}

在C#中访问数据库时,Tag对象有一个&#34; TagBMs&#34;财产,书签上有一个&#34; BMTags&#34;我可以用来向书签添加标签和向标签添加书签的属性。但是,当我尝试从F#访问同一个数据库时,这些属性不会出现。相反,Bookmark对象有一个&#34; BookmarkTag&#34;从链接表返回数据的属性。我需要更改什么才能在F#中获得正确的属性?我按如下方式设置了SqlDataConnection类型:

type dbSchema = SqlDataConnection<"""Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DatabaseModelAndMigrations.BookmarksContext;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False""">

1 个答案:

答案 0 :(得分:0)

不要使用SQL类型提供程序,只需使用F#代码中的C#EF DbContext。

会更简单,更简单。