用外键设计模型

时间:2018-04-02 04:56:17

标签: repository-pattern dapper unit-of-work

我正在使用Dapper使用Unit或Work and Repository构建ORM。我已经在互联网上搜索过这个问题但没有运气。

我有以下表格:

My tables

如您所见,Instance内部有实体。我有两种方法:

方法1:

public class Entity
{
     public int Id {get;set;}
     public string Name {get;set;}
}

public class Instance
{
     public int Id {get;set;} 
     public Entity Entity {get;set;}
     public string Name {get;set;}
}

如何通过这种方法获得Entity的价值?

方法2(根据this link):

public class Entity
{
     public int Id {get;set;}
     public string Name {get;set;}
}

public class Instance
{
     public int Id {get;set;} 
     public int EntityId {get;set;}
     public string Name {get;set;}
}

哪种设计更适合使用?

1 个答案:

答案 0 :(得分:1)

如果要从两个不同的表中获取数据并将其填入两个不同的POCO类,则可以使用QueryMultiple。以下内容是从here复制的:

string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID; SELECT * FROM InvoiceItem WHERE InvoiceID = @InvoiceID;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    using (var multi = connection.QueryMultiple(sql, new {InvoiceID = 1}))
    {
        var invoice = multi.Read<Invoice>().First();
        var invoiceItems = multi.Read<InvoiceItem>().ToList();
    }
}

您可以使用此方法处理代码中提到的两种模型。

作为替代方法,您可以将两个POCO合并为一个,也可以使用继承。但是,看看你的数据模型,我认为这不适用于这种特殊情况。

  

哪种设计更适合使用?

由你决定。无论什么适合您的项目需要,保持不必要的复杂性对您有好处。