我认为这个问题可能相当简单,但我一直在寻找并且无法找到我想要的东西。
我和我的团队正在为现有的Web应用程序添加一个新模块。我们已经有了一个现有的数据模型,它连接到我们的sql db,而且非常庞大......所以对于新模块,我直接从我们的数据库创建了一个新的EF数据模型,新模块的新表。这些新表通过外键引用我们现有的一些表,但是当我添加这些表时,需要为该表映射所有外键,以及它们的表和它们的表......这看起来像是一个巨大的混乱。
我的问题是,不是将旧表添加到数据模型中,因为我只引用现有表的ID用于外键目的,我可以在{{1}中的某处.Includes("old table")
进行操作或者我应该返回并将这些表添加到模型中并删除所有关系?或者也许是其他一些我甚至都不知道的方法?
很抱歉缺少代码,这更像是一个逻辑问题,而不是特定的语法问题。
答案 0 :(得分:2)
简单的答案是否定的。您不能包含不属于您的模型的实体(=未映射到您当前上下文使用的EDMX中)。
更复杂的答案是:在一些非常特殊的情况下,您可以,但它需要对您的开发过程以及您使用EF和EDMX的方式进行重大更改。您准备好将所有EDMX文件手动维护为XML吗?在这种情况下,EF提供了一种方法来引用另一个概念模型,并使用从新模型到旧模型的单向关系。这是一个骗子,因为您将拥有多个概念模型(CSDL),但单个映射文件(MSL),单个存储描述(SSDL)和使用所有这些的单个上下文。请查看this article以获取示例。
答案 1 :(得分:1)
我不知道您可以使用Include来引用EF图表之外的表格。要开始使用EF,您只需要包含数据库的一部分 - 如果您的第一个项目正在使用它可能的离散功能区域。当您导入和整个旧数据库时,这可能会解决令人担忧的混乱。我试图这样做时吓到了我。
在我们类似的情况下 - 一个使用存储过程的大型遗留系统,我们只添加了那时我们直接工作的表。稍后,您可以随时在需要时添加其他表。不要担心EF图中引用未包含的表的外键。实体框架乐于应对这一点。
它确实意味着运行两个业务层,一个用于实体框架,另一个用于旧式数据访问。不过对我们来说不是问题。事实上,从我读到的关于遗留系统编程的内容来看,它可能就是要走的路 - 你有一个业务层与你的邋old旧东西和一个业务层与你闪闪发光的新东西。继续从旧的到新的,直到有一天旧的业务层蒸发成任何东西。
答案 2 :(得分:0)
您必须对会员使用 [包含()] 。
例如:
// This class allows you to attach custom attributes to properties
// of the Frame class.
//
// For example, the following marks the Xyz property as a
// required property and specifies the format for valid values:
// [Required]
// [RegularExpression("[A-Z][A-Za-z0-9]*")]
// [StringLength(32)]
// public string Xyz { get; set; }
internal sealed class FrameMetadata
{
// Metadata classes are not meant to be instantiated.
private FrameMetadata()
{
}
[Include()]
public EntityCollection<EventFrame> EventFrames { get; set; }
public Nullable<int> Height { get; set; }
public Guid ID { get; set; }
public Layout Layout { get; set; }
public Nullable<Guid> LayoutID { get; set; }
public Nullable<int> Left { get; set; }
public string Name { get; set; }
public Nullable<int> Top { get; set; }
public Nullable<int> Width { get; set; }
}
}
LINQ应该有
.Includes("BaseTable.IncludedTable")
语法。
对于不属于模型的实体,您必须创建一些视图类。