gpt4 book ai didi

nhibernate - Fluent NHibernate 将引用映射到不是 ID 列的列

转载 作者:行者123 更新时间:2023-12-04 08:18:13 25 4
gpt4 key购买 nike

我正在使用 Fluent Nhibernate 1.0 和 Sharp Architecture 1.0

目前我正在尝试将引用映射到 ZipCode 类。我正在映射的当前类有一个 ZipCode 列,但是 zipcode 类比基本 zipcode 所需的类要广泛得多,因此这背后的原因。 (基本上 Zipcode 类包含经纬度。UTC 时区等,所有内容都是只读的)

这是我的映射

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

当我运行测试时,出现此错误。

Initialization method CountryRepositoryTests.SetUp threw exception. System.Data.SqlClient.SqlException: System.Data.SqlClient.SqlException: Column 'ZipCode.ZipCodeID' is not the same data type as referencing column 'Address.ZipCode' in foreign key 'FK8C1490CB2993CD44'. Could not create constraint. See previous errors..



我曾尝试添加 ForeignKey 和 Constrained lambdas,但它们似乎没有添加任何内容。

邮政编码表有一个 ID,但我不想映射到那个,而是我想映射到邮政编码表的邮政编码列,回到地址表的邮政编码列。

如果有人对我如何解决这个问题有任何想法,我将不胜感激。

请注意,正如我在上面所做的那样,我不能简单地引用邮政编码表并删除地址上的属性,因为邮政编码表是只读的。

这是 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; }

这是 ZipCode 表映射
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");

关于nhibernate - Fluent NHibernate 将引用映射到不是 ID 列的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2066515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com