我有一个抽象基类Contact
,它有两个子类:Person
和Company
。
我希望拥有Customer
,Vendor
或其他类型,可以是Company
或Person
(所有类型共享相同的主键{{1} })。
我的问题是,是否可以从ContactId
继承所有这些类型?如果答案是否定的,是否还有另一种方法可以利用PK中的Contact
属性?这种情况的推荐设计是什么?
请注意,我希望Contact
/ Employee
等也可以成为Customer
。
答案 0 :(得分:1)
你将如何在C#中实现这一目标?这是你必须回答的第一个问题,因为.NET不支持多继承,因此你不能拥有源自Customer
或/和Person
的单个Company
类 - 你需要单独{ {1}}来自Customer
的类和来自Person
的另一个Customer
类,但每次看到这个时,您都应该知道自己做错了什么。此外,如果您将来发现需要具有Company
和Employee
的联系人,您将准备删除整个应用程序,因为继承将无法实现这一点。只有直接SQL才能将Customer
从Contact
更改为Customer
,因为EF不允许这样做。
继承不是解决您问题的方法 - 您必须使用合成(关系)。