3

我已经开始尝试使用 LINQ to 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;
    }
}

由于项目限制(处理模式更改的方式以及因为存在现有的数据库模式并且它有点过于有机和不严格),我没有使用并且不愿意求助于建模工具

有没有办法让实体框架具有这种灵活性,而不必包含架构信息文件和/或许多不同的代码文件?

然后我是否还可以创建“使用”多个基础表的类?

谁能指出我有关此的文档?

4

2 回答 2

8

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

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

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

  1. For most of the early history (pre-RTM; "ObjectSpaces") of the Entity Framework, writing the XML files manually was the only way to use the tool. The designer is a recent feature, and is considerably less stable than the Entity Framework itself.
  2. There are certain Entity Framework features, such as complex types, which are not supported in the designer at all.
  3. Certain mapping scenarios, such as not mapping individual columns, or mapping tables without a foreign key relationship, which may be necessary for legacy databases, are not supported in the designer.
  4. As I mentioned in (1) the designer is quite a bit buggier than the Entity Framework itself. So on larger projects you will probably end up having to clean up after the designer's mistakes.
于 2009-03-10T11:56:39.840 回答
1

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

它不支持此信息的属性类。编写 EDM 的唯一明智方法是通过设计器(本质上是您不喜欢的建模工具)。

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

于 2009-03-10T05:26:47.563 回答