使用外键设计模型
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?
由你决定。只要适合您的项目需要,减少不必要的复杂性对您都有好处。
我正在使用 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?
由你决定。只要适合您的项目需要,减少不必要的复杂性对您都有好处。