使用外键设计模型

Designing Model with foreign key

我正在使用 Dapper 使用 Unit 或 Work 和 Repository 构建 ORM。我已经在网上搜索过这个问题,但没有成功。

我有以下表格:

如你所见,Instance里面有Entity。我有两种方法:

方法一:

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;}
}

如何使用这种方法获得实体的价值?

方法 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;}
}

哪种设计更好用?

如果你想从两个不同的表中获取数据并填充到两个不同的 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 合并为一个,也可以使用继承。但是,查看您的数据模型,我认为这不适用于这种特殊情况。

Which design is better for use?

由你决定。只要适合您的项目需要,减少不必要的复杂性对您都有好处。