检查通用 DbSet 是否有 Identity Key

Emi*_*uiz 0 c# entity-framework-core .net-core

问题:有了泛型DbSet<T>,我如何知道类 T 是否有身份密钥?

这是我的情况:

public static string SqlCodeGenerator<T>(DbContext context) where T : class
{
    var query = string.Emtpy;
    var set = context.Set<T>();

    if (set.HasIdentity())
        query += "SET IDENTITY_INSERT ON;\n";

    // Continue building query...
}
Run Code Online (Sandbox Code Playgroud)

我不需要知道哪个属性,只要它有或没有(尽管为答案提供了额外的分数)。

pwr*_*imo 5

更灵活的方法,不直接链接到 SQL Server,但它涵盖了 Identity 列。至少那些标有[DatabaseGenerated(DatabaseGeneratedOption.Identity)]attribute的属性

foreach (var key in dbContext.Model.FindEntityType(typeof(Entity)).GetKeys())
{
    foreach (var property in key.Properties)
    {
        if (property.ValueGenerated == Microsoft.EntityFrameworkCore.Metadata.ValueGenerated.OnAdd)
        {
            Console.WriteLine("gotcha!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)