سؤال

تقوم إحدى عمليات ترحيل EF الخاصة بي بإنشاء جدول وكجزء من عملية الترحيل Up الطريقة أود ملء هذا الجدول بالبيانات الأولية.

إليكم فئة الهجرة الخاصة بي:

public partial class Objects : DbMigration
{
    void Fill(string table, string path, string fieldTerminator = ",", string rowTerminator = @"\n")
    {
        Sql(string.Format("BULK INSERT {0} FROM '{1}' WITH (FIELDTERMINATOR = '{2}', ROWTERMINATOR = '{3}')", table, path, fieldTerminator, rowTerminator));
    }

    public override void Up()
    {
        CreateTable(
            "dbo.Objects",
            c => new
                {
                    ObjectId = c.Int(nullable: false),
                    Name = c.String(),
                    Location_X = c.Double(nullable: false),
                    Location_Y = c.Double(nullable: false),
                    Location_Z = c.Double(nullable: false),
                })
            .PrimaryKey(t => t.ObjectId);

        Fill("dbo.Objects", @"C:\temp\Scratch\Junk\ConsoleApplication3\data\objects.csv");
    }

    public override void Down()
    {
        DropTable("dbo.Objects");
    }
}

يعمل هذا بشكل صحيح على جهازي من وحدة تحكم إدارة الحزم.ومع ذلك، أرغب في استخدام مسار نسبي للملف حتى يتمكن فريق التطوير بأكمله من استخدام هذا بسهولة.

عندما كتبت ببساطة اسم الملف فشل التحديث.عندما حاولت ربط الدليل الحالي باسم الملف رأيت أن الدليل الحالي هو c:\windows\system32.

كيف يمكنني تشغيل التحديث من دليل المشروع أو الحل؟

وبدلاً من ذلك، هل هناك طريقة أفضل لملء الجدول أثناء التحديث؟لا أريد استخدام Seed الطريقة لأنها لا تفعل بالضبط ما أريد.على سبيل المثال، هناك واحد فقط Seed الطريقة بينما أريد كتابة تعليمات برمجية مختلفة لعمليات ترحيل مختلفة.

هل كانت مفيدة؟

المحلول

ك الحل البديل يمكنك الحصول على المسار إلى الملف المصدر الحالي ثم الدخول إلى المسار النسبي لملف CSV مع البيانات.

المعنى بدلًا من:

dataFile = @"C:\temp\Scratch\Junk\ConsoleApplication3\data\objects.csv";

لديك شيء مثل:

currentFile = GetSourceFilePath(); // See below hints for implementation
dataFile = Path.Combine(
    Path.GetDirectoryName(currentFile),
    @"..\data\objects.csv"
);

فيما يلي بعض الأمثلة حول كيفية الوصول إلى مسار الملف المصدر بالضبط - اطبع اسم الملف المصدر ورقم الكتان في C#.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top