Выбор значений атрибута с Пакетом Гибкости HTML

Основано на отношениях - EF Core | Документы Microsoft вы можете использовать аннотации данных

аннотации данных

Существуют две аннотации данных, которые можно использовать для настройки отношений, [ForeignKey] и [InverseProperty]. [1112 ]

[ForeignKey]

Аннотации данных можно использовать, чтобы указать, какое свойство следует использовать в качестве свойства внешнего ключа для данного отношения. Обычно это делается, когда свойство внешнего ключа не обнаружено соглашением.

[InverseProperty]

Вы можете использовать аннотации данных, чтобы настроить, как соединяются свойства навигации на зависимых и главных объектах. Обычно это делается, когда между двумя типами сущностей существует более одной пары свойств навигации.

blockquote>
public class Team
    {
        public int Id { get; set; }
        public string Name { get; set; }

        [InverseProperty("HomeTeam")]
        public ICollection HomeGames { get; set; }

        [InverseProperty("AwayTeam")]
        public ICollection AwayGames { get; set; }
    }

public class Game
    {
        public int Id { get; set; }
        public DateTime Date { get; set; }

        public int HomeTeamId { get; set; }
        [ForeignKey("HomeTeamId")]
        public Team HomeTeam { get; set; }

        public int AwayTeamId{ get; set; }
        [ForeignKey("AwayTeamId")]
        public virtual Team AwayTeam { get; set; }
    }

если вы используете db.Database.Migrate (), вы получите сообщение об ошибке

System.Data.SqlClient.SqlException: 'введение ограничения FOREIGN KEY' FK_Games_Teams_HomeTeamId 'на Таблица «Игры» может вызывать циклы или множественные каскадные дорожки. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, либо измените другие ограничения FOREIGN KEY. Не удалось создать ограничение или индекс. Посмотрите предыдущие ошибки

blockquote>

, вы можете сделать HomeTeamId AwayTeamId int? обнуляемым

public class Team
    {
        public int Id { get; set; }
        public string Name { get; set; }

        [InverseProperty("HomeTeam")]
        public ICollection HomeGames { get; set; }

        [InverseProperty("AwayTeam")]
        public ICollection AwayGames { get; set; }
    }

public class Game
    {
        public int Id { get; set; }
        public DateTime Date { get; set; }

        public int? HomeTeamId { get; set; }
        [ForeignKey("HomeTeamId")]
        public Team HomeTeam { get; set; }

        public int? AwayTeamId{ get; set; }
        [ForeignKey("AwayTeamId")]
        public virtual Team AwayTeam { get; set; }
    }

или см. Каскадное удаление - EF Core | Документы Microsoft

  • здесь полный код, который я тестировал и работал ( дБ сначала не код первым )

  • для кода сначала используйте int?

  • для Program.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations.Schema;
    using Microsoft.EntityFrameworkCore;
    
    namespace stackoverflow54196199
    {
    
    public class Team
    {
    
        public int Id { get; set; }
        public string Name { get; set; }
    
        [InverseProperty("HomeTeam")]
        public ICollection HomeGames { get; set; }
    
        [InverseProperty("AwayTeam")]
        public ICollection AwayGames { get; set; }
    }
    
    public class Game
    {
        public int Id { get; set; }
        public DateTime Date { get; set; }
    
        public int HomeTeamId { get; set; }
        [ForeignKey("HomeTeamId")]
        public Team HomeTeam { get; set; }
    
        public int AwayTeamId { get; set; }
        [ForeignKey("AwayTeamId")]
        public Team AwayTeam { get; set; }
    }
    
    
    public class MyContext : DbContext
    {
        public DbSet Games { get; set; }
        public DbSet Teams { get; set; }
    
    
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Server=.;Integrated Security=true;Initial Catalog=stackoverflow54196199;Persist Security Info=False;");
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            var db = new MyContext();
            foreach (var game in db.Games.Include(i => i.AwayTeam).Include(i => i.HomeTeam))
            {
                Console.WriteLine(game.HomeTeam.Name);
                Console.WriteLine(game.AwayTeam.Name);
    
            }
            Console.ReadLine();
        }
    }
    }
    
  • для stackoverflow54196199.csproj

    
      Exe
      netcoreapp2.1
    
    
    
      
      
      
     
    

9
задан Vegar 12 February 2009 в 15:57
поделиться

2 ответа

Пакет Гибкости HTML не поддерживает выбор атрибута.

12
ответ дан 4 December 2019 в 06:30
поделиться

Html Agility Pack скоро будет поддерживать его.

http://htmlagilitypack.codeplex.com/Thread/View.aspx?ThreadId=204342

1
ответ дан 4 December 2019 в 06:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: