C# 我可以像使用LINQ到SQL一样使用实体框架吗?

C# 我可以像使用LINQ到SQL一样使用实体框架吗?,c#,linq-to-sql,entity-framework,linq-to-entities,C#,Linq To Sql,Entity Framework,Linq To Entities,我已经开始尝试使用LINQ到SQL,我现在做的基本上是使用LINQ映射装饰器创建类,从而选择要合并到类中的db表模式的哪些部分 一个简单的例子: private DateTime? _LocalCopyTimestamp = (DateTime)SqlDateTime.MinValue; [Column(Name = "recaLocalCopyTimestamp", Storage = "_LocalCopyTimestamp", CanBeNull = true)] public DateT

我已经开始尝试使用LINQ到SQL,我现在做的基本上是使用LINQ映射装饰器创建类,从而选择要合并到类中的db表模式的哪些部分

一个简单的例子:

private DateTime? _LocalCopyTimestamp = (DateTime)SqlDateTime.MinValue;
[Column(Name = "recaLocalCopyTimestamp", Storage = "_LocalCopyTimestamp", CanBeNull = true)]
public DateTime? LocalCopyTimestamp
{
    get
    {
        return this._LocalCopyTimestamp;
    }
    set
    {
        this._LocalCopyTimestamp = value;
    }
}
由于项目约束(模式更改的处理方式以及现有的数据库模式,有点过于有机和不严格),我不使用也不愿意求助于建模工具

有没有一种方法可以使实体框架具有这种灵活性,而不必包含模式信息文件和/或大量不同的代码文件

然后我还能创建“使用”多个基础表的类吗


有人能给我指一下有关这方面的文档吗?

实体框架使用EDM对数据进行建模;这是一组3个复杂的模式文件(存储、概念、映射),通常作为资源存储在项目中(通过设计器使用单个EDMX文件生成所有3个模式文件)

它不支持此信息的属性类。编写EDM的唯一合理方法是通过designer(本质上是一个您不喜欢的建模工具)


重新分类“使用”多个基础表;是的,概念层的单个实体框架实体(即类)可以跨越多个存储表。这对于一些继承示例特别有用,但是(IIRC)也可以用于平面模型。您可以通过存储层和概念层之间的“映射”(最常见的是,在设计器的选项卡上)来实现这一点。

您请求的功能(编写C类并从这些类生成模型)由实体框架团队命名。“实体框架的当前发布版本中不存在它,但这是下一版本的计划功能。如果您观看,您可以看到此新功能的演示。在当前版本中,您不必编写“许多”映射文件,但您确实需要一个(EDMX文件),并且它必须是XML

是的,您可以创建使用多个基础表的实体类。这称为链接处的“逐步说明”。通常,您会发现实体框架支持比LINQ到SQL更复杂的映射场景

恐怕我不得不完全不同意Marc关于在没有使用designer的情况下编写EDMX的观点。不使用设计器编写EDMX不仅是可能的,而且对于超出某一方面的项目来说,这几乎是不可避免的。关于这一点,有几点:

  • 对于实体框架的大部分早期历史(pre-RTM;“”),手动编写XML文件是使用该工具的唯一方法。设计器是最新的特性,它的稳定性远远低于实体框架本身
  • 有些实体框架特性,例如复杂类型,在设计器中根本不受支持
  • 设计器中不支持某些映射方案,例如不映射单个列,或映射没有外键关系的表,这对于旧数据库可能是必需的
  • 正如我在(1)中提到的,设计器比实体框架本身要复杂得多。因此,在大型项目中,你可能最终不得不在设计师的错误后进行清理

  • 很好的回答,我认为根据你所说的,最好等到下一个版本。你对设计师的观点都被注意到了。我也同意莱皮的观点:我坚持下一个版本-p在MVP峰会上花了一天的时间来研究它,看起来比现在的版本好多了。。。嗯,从RTM的历史来看,他们都有相同的年龄。。。