Entity Framework Et Business Objects

Je n'ai jamais utilisé le framework entity avant et je voudrais essayer quelques projets personnels de le mettre en œuvre pour me mouiller les pieds.

je vois que les entités peuvent être exposées à la couche de présentation. Mais je ne veux pas que certains champs soient exposés, des champs comme les dates modifiées et les dates créées et divers autres champs de la base de données.

Comment pourrais-je mettre en œuvre des objets D'affaires et juste exposer les propriétés dont j'ai besoin mais toujours garder les objets sérialisable?

Quels sont les avantages par rapport à LinqToSql?

10
demandé sur dove 2011-03-05 12:04:02

5 réponses

lorsque vous définissez une entité dans le modèle EDMX, vous pouvez spécifier la visibilité du setter et du getter de chaque propriété, donc si vous ne voulez pas que le ModifiedDate soit visible dans d'autres calques, vous pouvez simplement le spécifier comme interne.

enter image description here

si vos exigences sont plus compliquées comme la date modifiée devrait être accessible dans l'entities assembly et l'business logic assembly mais pas dans L'UI assembly, alors vous besoin de créer un autre objet qui sera échangé entre la logique métier et les couches logiques UI.

22
répondu Ladislav Mrnka 2014-04-03 20:14:52

utilisez personnellement une classe wrapper sur entity et exposez ou shadow ce dont j'ai besoin.

// instead of below property in your BLL:

private int m_someVariable;

public int SomeVariable
{
    get { return m_someVariable; }
    set { m_someVariable = value; }
}

// You can use the entity object:

private readonly EntityClass _entityObject = new EntityClass();

public int SomeVariable
{
    get { return _entityObject.SomeVariable; }
    set { _entityObject.SomeVariable = value; }
}

// or make it read-only at your BLL

public int SomeVariable
{
    get { return entityObject.SomeVariable; }
    // set { entityObject.SomeVariable = value; }
}
3
répondu Xaqron 2011-03-05 22:43:37

vous ne liez les propriétés que vous voulez à la couche de présentation, cela peut être fait par une déclaration, Une couche de logique D'affaires (avec son propre niveau d'abstraction d'objet) ou votre modèle de vue.

1
répondu Lazarus 2011-03-05 09:12:29
      // this is your edmx
        Asset5Entities conx = new Asset5Entities();

// considère que c'est un nouvel objet de la liste de Contact qui est une table dans la base de données /cette table de base de données est mappée à un objet pour u à manipuler

            List$gt;Contact$lt; s = new List$gt;Contact$lt;();

/ / en utilisant un grand de LINQ u peut maintenant sélectionner ou interroger sur n'importe quelle table dans la base de données ur et u ont // accès aux colonnes de ce tableau exemple (Email) ici

        var result = from q in conx.Contacts select q.Email;

/ / plutôt que

        string sqlcommand = "select email from Contacts";
        Contact con = new Contact();
        con.Email= "xxxx@gmail.com";
        con.FirstName="nader";

        //etc etc... 



        conx.Contacts.AddObject(con);

        //rather than   " insert into Contact values ......................"

        //having your queries within ur c# code rather than strings that are not parsed //for errors but on runtime was alot helpful for me
1
répondu N Jay 2011-08-31 14:47:26