gpt4 book ai didi

c# - 使用附加属性扩展组件

转载 作者:行者123 更新时间:2023-11-30 18:40:05 25 4
gpt4 key购买 nike

所以我正在考虑创建一个我将在各种不同项目中使用的简单组件。该组件提供了一个我在许多项目中使用的类(比方说,汽车)。该组件还具有诸如用于列出各种汽车的基本 View 之类的东西,并通过 Entity Framework 将其自己的数据持久保存到数据库中。

现在我的问题是,如何在项目之间扩展这个汽车组件?不同项目中的大多数汽车具有非常相似的属性,但它们都有一些额外的属性。那么,如果我稍后改进基础组件,我该如何以一种允许我只更新包含该组件的 .dll 的方式将这个额外功能(或只是属性)添加到组件中呢?以及如何让组件“意识到”其数据库中的额外列?

到目前为止,我一直在考虑两种不同的选择,但都不喜欢。首先是只获取最新版本的组件,添加当前项目需要的东西并使用它。但如果我想更新基础组件,这显然会变得很麻烦。我想到的第二种选择是主要组件有一个指向“扩展”表的链接,然后可以在定制项目中进一步定义该表。或者类似的东西。

您可能会说,我对这一切还很陌生。因此,非常感谢任何和所有提示!

最佳答案

如果您所说的 EF 模型是指 EDMX 文件,那么答案很可能是:不直接可行。您可以从另一个项目/解决方案中的现有组件派生新组件,但不能扩展 EDMX = 您必须在每个添加其自定义项的项目中为新组件模型创建新的 EDMX。 EDMX 是映射,如果你改变了类或数据库,你必须定义新的映射,因为 EDMX 是 XML 文件,它不能像你用类那样简单地继承(实际上只有一种方法可以重用现有的 EDMX 但它非常有限且很难使用,因为 Visual Studio 中的设计器不支持它。

在代码优先的情况下,您可以为基本组件定义 EntityTypeConfiguration 并在新项目中继承它以添加新属性。但是您同样需要一些定制,因为新项目中的模型构建器必须加载正确的(新的)映射配置类,而不是原始项目中使用的旧映射配置类。

在代码优先的情况下,您还可以使用“默认”映射约定,如果您遵循正确的命名模式(代码中的属性和类必须与数据库中的列和表具有相同的名称),它可以在不更改映射的情况下工作).

另一个问题是 ObjectSet/DbSet。如果您的基础上下文使用类似的内容:

public ObjectSet<Car> Cars { get; set; }

如果你想在你的新项目中只包含派生类,你也应该修改上下文,否则你将使用映射继承,这只会让一切变得复杂。

关于c# - 使用附加属性扩展组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8851510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com