在DAL中插入合成关系的最佳方法

时间:2017-11-02 21:39:20

标签: c# database insert data-access-layer relational

我创建了一个自定义DAL来持久化并从数据库中获取数据。对于单个实体,没有问题。但我需要一个相关实体的实现。这是一种复合关系。

例如,我有一个Contact类

public class Contact
{
    public ContactId {get;set;}
    public Name {get;set;}
}

特定联系类型的classess:

public class Customer : Contact
{
    public CustomerNumber {get;set;}
}

我应该使用插入到Contact和Customer表的Insert(客户客户)方法创建CustomerDAL类,还是应该创建2个DAL,CustomerDAL和ContactDAL分别插入每个实体?

实现这一目标的最佳方法/模式是什么?

1 个答案:

答案 0 :(得分:0)

我不认为这里的答案是继承。您正在做的是让客户成为联系的子类,这样您就可以访问这些属性,但可以“平坦化”#34;设计和限制您的DAL只允许客户的单一联系。

我很想通过一个属性公开联系人

public class Customer
{
    public ... your usual customer properties go here
    public Contact contact {get; set;}
}

如果您可能与我建议您拥有的客户有很多联系,那么:

public class Customer
{
    public ... your usual customer properties go here
    public List<Contact> contact {get; set;}
}

您是否正在手动滚动自己的DAL表单,而不是使用ORM工具(如Entity Framework)来节省时间?如果数据库中有外键,它也可以检测这些外键并为您创建此属性。但是,当然,您可能正在使用不同类型的数据存储,在这种情况下,请忽略我的答案部分。请记住,即使您使用EF创建POCO,如果您不想,也没有义务将其用于数据库查询。 但是,如果仍然需要ADO.NET的速度,则可以使用EF在不使用LINQ的情况下执行自己的SQL查询或存储过程,并且仍然可以从连接处理和重试查询等方面受益。