我想将GUID实现为模型中的主键。我使用模型优先方法,我希望GUID
不是在数据库中生成,而是在.NET服务器中生成。
我见过一个解决方案,说我必须为每个班级做这个:
public class TestObject
{
public TestObject()
{
Id = Guid.NewGuid();
}
public Guid Id { get; set; }
}
问题在于:我不认为这是一个干净的解决方案,将其应用于我所拥有的每个班级。
我没有 POCO类,因为我使用的是模型优先。
那么,我该怎么办?这是最好的方法,你觉得呢?有什么建议吗?
答案 0 :(得分:0)
在这种情况下,为了独立于任何其他考虑回答问题,您应该:
如果您的类实现了诸如
之类的接口interface {
Guid Id {get; set;}
}
您的任务将变得更加轻松。
答案 1 :(得分:0)
由于您的所有实体似乎都有Id
作为主键,最明显的是修改t4模板,因此会生成guid初始化。
在用于实体生成的当前t4模板(类似ModelName.tt
)中,构造函数生成以...开头。
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public <#=code.Escape(entity)#>()
{
<#
foreach (var edmProperty in propertiesWithDefaultValues)
(在我的模板中,它从第37行开始)
将此更改为......
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public <#=code.Escape(entity)#>()
{
this.Id = Guid.NewGuid();
<#
foreach (var edmProperty in propertiesWithDefaultValues)