使用 C# 获取 SQL Server 中表的列大小

问题描述 投票:0回答:2

如何使用实体框架获取表的列大小?

假设我们在应用程序中对

SomeTable
进行了建模,如下所示:

public class SomeTable
{
    [Key]
    public long TicketID { get; set; }
    public string SourceData { get; set; }
}

它就在我们的

SomeDbContext
内部,就像这样:

public class SomeDbContext : DbContext
{
    public DbSet<SomeTable> SomeTables { get; set; }
}

Db 中的此表具有

SourceData
列,如下所示:
varchar(16)

如何使用 C# 获取此列的大小(在本例中为 16)?

c# sql-server entity-framework
2个回答
0
投票

假设您使用实体框架代码优先。

DbContext
有一个虚函数
OnModelCreating
,您可以在派生类中重写它。在此函数中,您向 DbContext 通知您打算在 DbContext 中表示的模型。

假设您有一个

DbSet<MyClass>
:

class MyClass
{
    public int Id {get; set;}
    public string MyText {get; set;}
    ...
}

并且您要指定 MyText 的最大长度为 10 个字符。

protected override void OnModelCreating (System.Data.Entity.DbModelBuilder modelBuilder)
{
     var myClassEntity = modelBuilder.Entity<MyClass>();

     // MyClass has a property MyText with a maximum length of 10
     myClassEntity.Property(entity => entity.MyText
                  .HasMaxLength(10);

     ... configure other MyClass properties.
}

0
投票

我正在回答这个问题,假设您在控制器操作中使用它,如果没有,那么就明白了,如果您喜欢这个,请告诉我。

public class MyController : Controller
{
    private readonly MyDbContext _dbContext;

    public MyController(MyDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public ActionResult GetColumnSize(string TableName)
    {
        try
        {
            using (var connection = _dbContext.Database.Connection as SqlConnection)
            {
                if (connection == null)
                    return HttpNotFound(); // Handle appropriately

                connection.Open();

                using (var command = connection.CreateCommand())
                {
                    command.CommandText = $"SELECT * FROM {TableName}"; // Replace with your table name
                    using (var reader = command.ExecuteReader(CommandBehavior.SchemaOnly))
                    {
                        DataTable schemaTable = reader.GetSchemaTable();
                        foreach (DataRow row in schemaTable.Rows)
                        {
                            string columnName = row.Field<string>("ColumnName");
                            int columnSize = row.Field<int>("ColumnSize"); // Get the column size
                            Console.WriteLine($"Column Name: {columnName}, Size: {columnSize}");
                        }
                    }
                }
            }

            // Handle the retrieved column sizes as needed
            // ...

            return View();
        }
        catch (Exception ex)
        {
            // Handle exceptions
            return View("Error", ex);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.