Linq to sql 从Linq到SQL实体派生的类仍然可以保存吗?

Linq to sql 从Linq到SQL实体派生的类仍然可以保存吗?,linq-to-sql,Linq To Sql,假设“Foo”是在linqtosql设计器中创建的linqtosql实体 然后我有了“Bar”,它来自于“Foo” 我应该能够使用LINQtoSQL保存“Bar”吗(假设我不在乎保存Bar上的任何额外属性) 这应该得到支持吗 多谢各位, 乔恩我不确定,但你为什么要这么做?这些实体都是作为分部类实现的,所以为什么不在分部类中实现所需的内容呢?我曾经尝试过这样做,但无法实现。我不记得抛出了什么错误,但为了避免它,我基本上必须使用反射检查所有属性,并将标有ColumnAttribute的属性复制到新的

假设“Foo”是在linqtosql设计器中创建的linqtosql实体

然后我有了“Bar”,它来自于“Foo”

我应该能够使用LINQtoSQL保存“Bar”吗(假设我不在乎保存Bar上的任何额外属性)

这应该得到支持吗

多谢各位,
乔恩我不确定,但你为什么要这么做?这些实体都是作为分部类实现的,所以为什么不在分部类中实现所需的内容呢?

我曾经尝试过这样做,但无法实现。我不记得抛出了什么错误,但为了避免它,我基本上必须使用反射检查所有属性,并将标有ColumnAttribute的属性复制到新的基类实例中,然后插入该实例。虽然不漂亮,但它很管用。自从我实现它以来,我还没有重新研究过这个问题,所以如果有更好的方法,我很想知道。

我坚持使用存储库模式,这意味着我在一个独立的dll(project.models.dll)中定义我的模型,然后创建我的IRepository的LinqToSql实现

linq类只存在于LinqToSql实现dll中,我创建了扩展方法来将模型转换为linq实体,反之亦然

我发现这使您能够在不过度依赖数据库的情况下测试系统的更多部分。虽然这有点痛苦,但每个项目只做一次


这意味着您可以完全控制对象的序列化,而且可以对它们做任何你喜欢的事情

原因是我希望Linq to SQL代码在一个库/dll中,我可以在许多应用程序中重用,在使用这个库的应用程序中,我希望用应用程序特定的知识扩展实体。我将实现一个存储库模式:不要公开Linq要创建SQL数据上下文,请将其标记为内部。在它(存储库)上有一个薄包装,然后将其公开。repository方法可以将扩展类转换为datacontext的基本实体。据我所知,这是除了重新实现映射源之外的唯一方法。Linq to Sql的AttributeMapping的默认实现只检索基类型本身的各种属性(TableAttribute、ColumnAttribute等),它忽略了任何继承的属性。有趣的是,在我发布了这篇文章之后,我只是觉得它不受支持,于是去下载automapper,将我的派生实体映射到基类的一个新实例。(和你发现的相似)效果很好。我还使用保存前触发的事件扩展了基类,以便派生类将其扩展数据序列化为xml(保存到基类模式中的xml列中)。
        using (myDataContext ctx = new myDataContext())
        {
            ctx.Foos.InsertOnSubmit(instanceOfBar);
            ctx.SubmitChanges();
        }