SQL 类型提供者无法为多对多关系正常工作
SQL type providers not working correctly for many to many relationship
我正在尝试使用 F# 中的 SqlDataConnection 类型提供程序来访问我使用 C# 中定义的 entity framework 代码优先模型创建的数据库。
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 对象有一个 "TagBMs" 属性,书签有一个 "BMTags" 属性,我可以用它来添加标签到书签和书签到标签。但是,当我尝试从 F# 访问同一个数据库时,这些属性不会出现。相反,Bookmark 对象有一个 "BookmarkTag" 属性,其中 returns 数据来自 link table。我需要更改什么才能在 F# 中获得正确的属性?我将 SqlDataConnection 类型设置如下:
type dbSchema = SqlDataConnection<"""Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DatabaseModelAndMigrations.BookmarksContext;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False""">
不要使用 SQL 类型提供程序,只需使用 F# 代码中的 C# EF DbContext。
会简单很多。
我正在尝试使用 F# 中的 SqlDataConnection 类型提供程序来访问我使用 C# 中定义的 entity framework 代码优先模型创建的数据库。
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 对象有一个 "TagBMs" 属性,书签有一个 "BMTags" 属性,我可以用它来添加标签到书签和书签到标签。但是,当我尝试从 F# 访问同一个数据库时,这些属性不会出现。相反,Bookmark 对象有一个 "BookmarkTag" 属性,其中 returns 数据来自 link table。我需要更改什么才能在 F# 中获得正确的属性?我将 SqlDataConnection 类型设置如下:
type dbSchema = SqlDataConnection<"""Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DatabaseModelAndMigrations.BookmarksContext;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False""">
不要使用 SQL 类型提供程序,只需使用 F# 代码中的 C# EF DbContext。
会简单很多。