8
votes

Comment configurer les relations entiétaux dans l'entité framework noyau

Ici, nous sommes sur EF Core et obtenu 3 tables:

  1. Actualités LI>
  2. articles li>
  3. Liens LI> ol>

    et plus (sauf actualités, articles): contenu, post, formulaire, etc. p>

    et mes définitions de modèle P>

    public class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
        public Link Link { get; set; }
    }
    
    public class News
    {
        public int Id { get; set; }
        public string Header { get; set; }
        public string Content { get; set; }
        public Link Link { get; set; }
    }
    
    public class Link
    {
        public int Id { get; set; }
        public string Type { get; set; }
        public int RowId  { get; set; }
        public string Url { get; set; }
    }
    


6 commentaires

Veuillez utiliser un titre plus décrit la prochaine fois et utilisez les balises appropriées. entité-framework est pour l'ancienne entitéFramework (1 à 6.x). entité-framework-core est pour le nouveau, à partir du noyau EF de grattage réécrit et de la fin, avant la Demander ce type de question Il est plus rapide et plus facile de consommer la documentation docs.microsoft .COM / EN-US / EF / Core / Modélisation / relations au lieu d'attendre une réponse;)


Ef noyau. Le principal problème de base de données existant et indésirable pour modifier dB, car beaucoup de données et beaucoup d'entités avec ces liens (contenu, catalogue et plus)


Que décrivez-vous est un modèle de base de données qui ne peut pas être décrit avec les contraintes FK, ce qui ne peut donc pas être mappé dans une version EF, y compris le noyau.


Vous avez associations polymorphes ici. Si vous souhaitez le transformer en un modèle avec des contraintes FK, vous avez pour changer le schéma de base de données.


Ivan Stoev, Gert Arnold, merci d'expliquer.


Vous pouvez davantage normaliser le schéma et ajouter deux nouvelles tables link_new: {Linkid, NewID} link_item: {LinkID, élémentId} Retrait de Rowid à partir de la table de liaison et tapez Dire s'il s'agit d'un objet ou d'une nouvelle


5 Réponses :


0
votes

update


J'ai lu votre question une fois de plus et bien pour être honnête, vous n'avez pas besoin de créer une autre table pour les liens, ajoutez simplement une colonne aux nouvelles et à l'article. sur .. Et tout ira bien. xxx


4 commentaires

Bonne idée pour les nouvelles et l'article. Mais ne modifiera pas la table des liens et ajouter des colonnes, car sauf actualités et articles Il existe d'autres entités telles que le contenu, etc., il sera donc beaucoup de NULL. C'est une raison pour laquelle voici Rowid et type . Puis-je utiliser quelque chose comme Hasdiscriminator ou un autre tour?


Comment construire Plan du site alors? foreach Chaque tables n'est pas une bonne idée. BTW, nous avons une table de menus qui décrit le menu arborescent.


Vous souhaitez générer un lien pour un enregistrement, c'est le meilleur si vous le mettez dans la même table. Aussi pour le site du site, vous pouvez ajouter une colonne nommée commande et la gérer de cette façon.


Voici un problème pour trouver l'URL nécessaire. Dans la demande, vous avez une URL et avez besoin de trouver ce qui est: article, nouvelles, contenu, catalogue ou forme. C'est une raison pour laquelle nous n'avons qu'une seule table de liens. Nous ne pouvons donc pas ajouter de l'URL à chaque table.



0
votes

Je changerais lien code> pour utiliser nullable int code> et séparez les touches étrangères pour ces tables:

public class Link
{
    public int Id { get; set; }
    public string Type { get; set; }
    public int? NewsId  { get; set; }
    public int? ItemId  { get; set; }
    public string Url { get; set; }
}


1 commentaires

Non, parce que voici beaucoup d'entités sauf les nouvelles et les articles.



0
votes

Je pense que vous pouvez supprimer le Rowid de la table des liens et ajouter une colonne de clé étrangère dans les 2 autres tables faisant référence à la colonne ID dans la table des liens.

Maintenant, avec vous avoir l'URL, vous avez le type et l'identifiant, vous pouvez simplement interroger le contenu de la table respective.


0 commentaires

0
votes

Pour avoir la propriété NEWROW, et les contraintes aux deux autres tables, vous l'appliquez à froid comme ceci: xxx

puis définissez cette propriété comme non mappée sur le contextDB.


0 commentaires

1
votes

DAPPER. Juste dapper qui permet d'écrire des requêtes personnalisées.


0 commentaires