سؤال

أنا أستخدم Nhibernate Fluent مع بنية حادة 1.0

حاليا أحاول تعيين إشارة إلى فئة zipcode. تحتوي الفئة الحالية التي أقوم بها بتخطيط عمود zipcode ، ولكن فئة Zipcode أكثر شمولاً بكثير مما هو مطلوب لرمز zipcode الأساسي ، وبالتالي السبب وراء هذا. (تحتوي فئة Zipcode بشكل أساسي على Lat. و Long. utc Zone Zone ETC ، كل الأشياء التي يتم قراءتها)

هذا هو رسم الخرائط الخاص بي

            References<ZipCode>(x => x.ZipCodeRadius, "ZipCode")
            .Column("ZipCode")
            .Cascade.None()
            //.ForeignKey("FK_ZipCode")
            .ReadOnly();

وعندما أقوم بإجراء اختباراتي ، أحصل على هذا الخطأ.

طريقة التهيئة CountryRepositoryTests.setup ألقا الاستثناء. System.data.sqlclient.sqlexception: system.data.sqlclient.sqlexception: العمود "zipcode.zipcodeid" ليس هو نفس نوع البيانات مثل عنوان العمود المرجعية. لا يمكن خلق قيد. انظر الأخطاء السابقة ..

لقد حاولت إضافة The Foreignkey و Lambdas المقيدة ، لكن يبدو أنها لا تضيف أي شيء.

تحتوي جداول ZipCode على معرف ، لكنني لا أرغب في تعيين ذلك ، بل أرغب في تعيين عمود zipcode لجدول zipcode ، مرة أخرى إلى عمود zipcode من جدول العنوان.

إذا كان لدى أي شخص أي أفكار كيف يمكنني الالتفاف على هذا ، فسأقدر ذلك حقًا.

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

هذه هي فئة zipcoderadius.

[NotNullNotEmpty, Length(Max = 5)]
public virtual string ZipCodeName { get; set; }
[NotNullNotEmpty, Length(Max = 1)]
public virtual string ZipType { get; set; }
[NotNullNotEmpty, Length(Max = 10)]
public virtual string TimeZone{ get; set; }

public virtual int UTC  { get; set; }

public virtual double Latitude { get; set; }
public virtual double Longitude { get; set; }

public virtual County County { get; set; }

هذا هو فئة العناوين

protected Address() { }

public Address(User UpdateUser)
    : base(UpdateUser)
{
    this.UpdateUserId = UpdateUser.Id.ToString();  
}

//[DomainSignature, NotNullNotEmpty]
//public virtual string Title { get; set; }

[NotNullNotEmpty, Length(Max = 50)]
public virtual string AddressLine1 { get; set; }

[Length(Max = 50)]
public virtual string AddressLine2 { get; set; }

[NotNullNotEmpty, Length(Max = 20)]
public virtual string City { get; set; }

public virtual StateOrProvince State { get; set; }

[NotNullNotEmpty, Length(Max = 10)]
public virtual string ZipCode { get; set;}

[Length(Max = 10)]
public virtual string ZipPlus { get; set; }

public virtual bool IsVerified { get; set; }

public virtual Country Country { get; set; }

public virtual ZipCode ZipCodeRadius { get; set; }

هذا هو تعيين جدول الرمز البريدي

Table("ZipCode");

Id(x => x.Id, "ZipCodeID");

Map(x => x.ZipCodeName, "ZipCode").AsVarChar(5);
Map(x => x.ZipType, "ZipType").AsVarChar(1);
Map(x => x.TimeZone, "TimeZone").AsVarChar(10);
Map(x => x.UTC, "UTC");
Map(x => x.Latitude, "Latitude");
Map(x => x.Longitude, "Longitude");

ReadOnly();
Cache.ReadOnly();
هل كانت مفيدة؟

المحلول

من الواضح أن Hasone هي الطريقة الصحيحة للقيام بذلك .... على الرغم من أنني اعتقدت أنني حاولت ذلك ، إلا أنني كنت أفتقد PropertyRef ...

            HasOne<ZipCode>(x => x.ZipCodeRadius)
            .PropertyRef(x => x.ZipCodeName)
            .ForeignKey("ZipCode");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top