Question

Mon schéma de table (extrait)

create table dbo.MyEntity
(
    MyEntityID int identity not null
        primary key,
    Name nvarchar(50) not null
        unique,
    Description nvarchar(500) null,
    -- these two are optional fields
    MaxCount int null,
    MinSpace int null
)

Classe d'entités (ES)

[MapField("MaxCount", "Rule.MaxCount")]
[MapField("MinSpace", "Rule.MinSpace")]
public class MyEntity
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    // when values are not null this property should have an instance
    public MyEntityRule Rule { get; set; }

    public bool HasRule
    {
        get { return this.Rule != null; }
    }
}

public class MyEntityRule
{
    public int MaxCount { get; set; }

    public int MinSpace { get; set; }
}

Problème?

La cartographie des champs à ma classe est le problème. Je voudrais cartographier directement les propriétés de classe interne à partir de résultats de résultats plats provenant de la table de données (en haut).

J'ai réglé MapFieldAttribute Paramètres au niveau de la classe (comme on le voit dans le code supérieur), mais mes règles sont toujours nulles. Il est supposé qu'une partie du problème est que cette propriété de classe interne doit être instanciée d'abord à être affectée, car tous les exemples Bltoolkit utilisent des objets internes non nullables. Mais dans mon cas, je ne veux pas en créer une instance si ça devait être null (La plupart du temps ce sera null).

Comment cela doit-il être fait alors?

Était-ce utile?

La solution

Solution de travail

Je commence vraiment à déteste bltoolkit en raison de la documentation très limitée et du soutien communautaire ou de son absence (au moins en anglais).

Je testais juste divers attributs qui peuvent être quelque peu liés à cela et en fait je l'ai fait fonctionner.

Si vous voulez que les objets imbriqués fonctionnent comme prévu, vous devez utiliser un NoInstanceAttribute. Et vous devez conserver ces attributs de mappage de champ sur la classe comme auparavant. La résultante code de travail est comme suit:

[MapField("MaxCount", "Rule.MaxCount")]
[MapField("MinSpace", "Rule.MinSpace")]
public class MyEntity
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    [NoInstance] // this will make it work
    public MyEntityRule Rule { get; set; }

    public bool HasRule
    {
        get { return this.Rule != null; }
    }
}

Toutes les règles qui ne définissent pas les valeurs sont nulles, d'autres sont instanciées.

Autres conseils

Bltoolkit ne crée pas une instance de myentityrule, vous devez le faire vous-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top