我正在使用LINQ to SQL来处理我正在开发的新项目,但我不想将LINQ类公开给我的应用程序。例如,select in link返回System.Linq.IQueryable<>采集。同样,为表示数据库而生成的所有类都使用Table,Column,EntityRef类和属性。如果我的数据访问层具有LINQ依赖性,那很好,但我不希望我的应用程序。
所以我的想法是,我必须使用LINQ to SQL生成的类作为不在我的数据访问层之外公开的中间类,并创建我自己的应用程序可以使用的类。将LINQ to SQL类中的数据放入我自己的类中最简单/最有效的方法是什么?
答案 0 :(得分:1)
Rob Conery发布了一个名为MVC-Storefront的网络广播系列,在那里他介绍了一种可以实现你想要的存储库模式的变体。
我在一个相当大的项目中使用了截屏视频中的想法,并对结果非常满意。
但是,模式存在问题,特别是在完全提交之前您需要预先考虑的并发和分离场景。
我用这种模式here详细说明了我的并发痛苦。
答案 1 :(得分:0)
从LINQ to SQL类转到类是一个相当直接的LINQ to Objects(或者只是对单个对象进行初始化)的问题。
更有趣的是从你的模型回到LINQ to SQL对象,但这是相当标准的东西(虽然我还在努力,或者我会找到一些特定的参考资料)。
答案 2 :(得分:0)
我会对你得到的回答感兴趣,因为我正在考虑完全相同的事情。我想在我们的后端使用L2S实体类,但是使用更轻量级的实体来进行应用程序消费。
兰迪
答案 3 :(得分:0)
这是我目前如何做到这一点:
我有一个DataContext类,我通过添加LINQ to SQL类并将表放到设计器上来创建。我调用了类MyDataContext并将其放在名为Linq的名称空间中。我的数据库有一个名为Tag的表,它在Linq命名空间中生成了一个类。我将所有访问器更改为内部访问器,因此它们在数据访问层之外不可见。
namespace Linq
{
[System.Data.Linq.Mapping.DatabaseAttribute(Name="MyDb")]
internal partial class MyDataContext : System.Data.Linq.DataContext
{
...
}
[Table(Name="dbo.vTag")]
internal partial class Tag
{
....
}
}
然后我创建了一个名为DataAccess的类,它将向任何引用该程序集的应用程序公开。我还创建了自己的Tag类。 DataAccess类和我的新Tag类位于名为Data的不同名称空间中,以避免与Linq名称空间中生成的类发生冲突。我使用Linq to Sql来查询Linq.Tag对象的IList,然后我使用Linq从Linq.Tag对象生成一个Data.Tag对象列表。
我想听听有关这方面的评论,看看是否有更高性能的方法,或者需要更少的代码。我对使用重复的类名(Tag)也不太满意,所以我也有兴趣听到有关命名建议的任何想法。
namespace Data
{
public class DataAaccess
{
public IList<Tag> List_Tags()
{
using (Linq.MyDataContext dal = new Linq.MyDataContext ())
{
IList<Linq.Tag> lstTags = (from c in dal.Tags select c).ToList();
return (from tag in lstTags
select new Data.Tag()
{
ID = tag.ID,
Name = tag.Name,
Parent_ID = tag.Parent_ID
}).ToList();
}
}
}
}
答案 4 :(得分:0)
您提出的建议是拥有两个独立的模型。这意味着样板代码,我发现它是没有必要的。我或多或少和你有同样的想法,但意识到这将是无用的。我已经在这个帖子的另一个答案中提出了Entity Framework,我想在这里再说一遍。
你最终得到的是一个模型汤,你必须维护两个模型而不是一个模型。这绝对不可取。