класс c # DAL и класс бизнес-уровня - PullRequest
1 голос
/ 19 ноября 2010

HI,

Можете ли вы сказать мне, если это возможно.

public class Person
{
    public string Name { get; set; }
    public int ID { get; set; }
}

Заполните вызов класса, скажем, лицо, которое находится в сборке под названием Entities, как это, с заполнением кодавыполняется в другой сборке с именем DataAccessLayer (таким образом, человек и место его заполнения не находятся в одной сборке)

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

Person p=new Person();
p.Name="tom";
p.id = 10;

Теперь класс person должен быть доступен для другой системы, чтобы он мог получить доступ к person.Я хотел бы, чтобы другая система не смогла изменить идентификатор.быть в состоянии прочитать это, но не написать.Нужно ли создавать другой класс и т. Д., Чтобы разрешить это, и предоставлять этот класс только другой системе (т. Е. Бизнес-объекту) (т. Е. ORM)?

Я знаю, что многие собираются сказать, просто сделайте IDнеизменяемые.то есть

public int ID { get; }

, но если я сделаю это, то не смогу заполнить идентификатор из кода, подобного приведенному выше, потому что в моем DataAccessLayer я не смогу установить идентификатор, так как он доступен только для чтения.

спасибо Найл

Ответы [ 2 ]

4 голосов
/ 19 ноября 2010

Вы можете создать конструктор internal для объекта, в который вы можете передать ID, затем установить флаг для DLL-библиотеки Entities, которая позволяет другой DLL (DataAccessLayer) иметь возможность видеть и использовать внутренние вызовы в этой DLL. (InternalsVisibleTo атрибут)

0 голосов
/ 19 ноября 2010

Посмотрите на инструменты ORM, которые назначат вам идентификатор сущности, и ваше свойство id будет выглядеть так:

public class MyEntity
{
     public virtual int ID { get; protected set; }

     // other properties
}

если вы выберете этот способ, вам не нужно беспокоиться о назначении свойств и приведениитипы.

...