Я пытаюсь использовать провайдер типа SqlDataConnection в F # для доступа к базе данных, которую я создал, с использованием первой модели сущности Framework, определенной на C#.Поставщики SQL-типов не работают правильно для многих-многих отношений.
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», которое возвращает данные из таблицы ссылок. Что мне нужно изменить, чтобы получить правильные свойства в F #? Я создал тип SqlDataConnection следующим образом:
type dbSchema = SqlDataConnection<"""Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DatabaseModelAndMigrations.BookmarksContext;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False""">
Почему вы не используете свой C# EF DbContext в коде F #? Было бы намного проще и проще. –
Спасибо Fyodor, я попробовал ваше предложение и с помощью контекста C# db в коде f #, и я могу использовать свойства, и многие из многих отношений работают правильно. Одна небольшая проблема с этим подходом заключалась в том, что, похоже, нет возможности легко отбросить все данные из таблицы, как это было с провайдером типа F # (я делаю это в своем тестировании интеграции), но я работал над этим, выполняя SQL «удалить из ...» напрямую. Если вы хотите рекламировать свой комментарий к ответу, я соглашусь с ним. –