Похоже, что ваш BLL выставляет entity
классы, которые вы добавили в DAL.Вам нужно будет создать классы-обертки (то есть POCO) в BLL и вернуть их вместо сущностей из DAL.
Это, вероятно, то, что вы делаете:
// DAL
// .edmx file generated entities
public IQueryable<TableEntity> GetTableEntities()
{
// read from entity framework and return
}
// BLL
public IEnumerable<TableEntity> ReadTableEntitiesForUser(int userID);
{
var d = new DAL();
var entities = d.GetTableEntities();
// restrict to entites this user "owns"
entities = entities.Where(e => e.OwnerID.Equals(userID));
return entities;
}
// WebApp
var b = new BLL();
var myEntities = b.ReadTableEntitiesForUser(1234);
Это, вероятно, именно то, что вы должны делать:
// DAL
// .edmx file generated entities
public IQueryable<TableEntity> GetTableEntities()
{
// read from entity framework and return
}
// BLL
public class TableEntityDTO
{
public int ID { get; set; }
public string Name { get; set; }
// continue on for each column in the table
// and make a DTO class for each table in your database
}
public IEnumerable<TableEntityDTO> ReadTableEntitiesForUser(int userID);
{
var d = new DAL();
var entities = d.GetTableEntities();
// restrict to entites this user "owns"
entities = entities.Where(e => e.OwnerID.Equals(userID));
// convert from "Entity Framework Object" to "BLL Object"
foreach(var e in entities)
{
yeild return new TableEntityDTO() { ID = e.ID, Name = e.Name };
}
}
// WebApp
var b = new BLL();
var myEntities = b.ReadTableEntitiesForUser(1234);
Это верно для Entity Framework, поставляемой с .NET 3.5SP1, и для Linq-To-SQL, который я немного использовал, может быть верным для последних версий EF, но с Code-First и другими вещами может быть способ избежать этого дополнительного шага Data-Transfer-Object, хотя и с сервис-ориентированнойАрхитектура, DTO, вероятно, лучший путь.