저는 몇 시간 동안 이미 검색 중이므로 문제를 찾을 수 없습니다.Entity Framework가 테이블에 중복 된 중복 식별자를 추가합니다.
Entity Framework의 Fluent API 코드 첫 번째 TPH 앱을 구축하고 있습니다. Add-Migration EF add의 "Type"열은 잘되지만 중복 Discriminator 열 ("Type"으로 덮어 써야 함)을 추가합니다. Map을 사용하여 Type 열 이름과 가능한 값을 지정합니다.이 방법은 대부분의 도메인 모델에서 잘 작동하는 것으로 보이지만이 중 하나는 중복 된 두 번째 discriminator 열을 가져오고 이유를 찾을 수없는 것 같습니다. Bond는 도메인 모델에서 Asset을 상속받습니다.
Heres는 내 코드 :
public class BondConfiguration : EntityTypeConfiguration<Bond>
{
public BondConfiguration()
{
Property(b => b.IssueDate)
.HasColumnName("BondIssueDate")
.HasColumnType(DatabaseVendorTypes.TimestampField)
.IsRequired();
Property(b => b.MaturityDate)
.HasColumnName("BondMaturityDate")
.HasColumnType(DatabaseVendorTypes.TimestampField)
.IsRequired();
HasRequired(b => b.Currency).WithRequiredDependent();
Property(b => b.Coupon.Rate);
Property(b => b.Coupon.Amount);
Property(b => b.FaceValue)
.HasColumnName("BondFaceValue")
.IsRequired();
}
}
public class AssetConfiguration : EntityTypeConfiguration<Asset>
{
public AssetConfiguration()
{
Property(a => a.IsDeleted).HasColumnName("IsDeleted");
HasKey(a => a.Id);
ToTable("tbl_Asset");
Property(a => a.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
.HasColumnName("AssetId");
Property(a => a.Name)
.HasColumnName("AssetName")
.IsRequired();
Property(a => a.Isin)
.HasColumnName("AssetISIN");
Map<Bond>(p => p.Requires("AssetClass").HasValue((int)AssetClass.Bond));
}
}
도메인 모델 :
public class Bond : Asset
{
public DateTime IssueDate { get; set; }
public DateTime MaturityDate { get; set; }
public BondCoupon Coupon { get; set; }
public Currency Currency { get; set; }
public decimal FaceValue { get; set; }
public IEnumerable<ValidationRule> SetCoupon(decimal amount, decimal rate)
{
var newCoupon = new BondCoupon
{
Rate = rate,
Amount = amount
};
if (Validate(new SetBondCouponValidator(newCoupon),out IEnumerable<ValidationRule> brokenRules))
{
Coupon = new BondCoupon
{
Rate = rate,
Amount = amount
};
}
return brokenRules;
}
}
public abstract class BaseAsset<T> : BaseEntity<T> where T : BaseEntity<T>, new()
{
public string Name { get; set; }
public string Isin { get; set; }
}
public class Asset : BaseAsset<Asset>, IEntityRoot
{
}
public class BaseEntity<T> where T : BaseEntity<T>, new()
{
public int Id { get; set; }
public bool IsDeleted { get; set; }
public bool Validate(IValidator validator, out IEnumerable<ValidationRule> brokenRules)
{
brokenRules = validator.GetBrokenRules();
return validator.IsValid();
}
}
문제를 재현 할 수 있도록'Asset'과'Bond' 클래스를 추가 할 수 있습니까? –
방금 도메인 모델을 추가했습니다. 이것 좀 봐 줘서 고마워. –
제공된 모델로 재생산 할 수 없습니다. 'Asset' 또는'Bond'를 상속받은 동일한 프로젝트 (어셈블리)에 다른 클래스가 있습니까? –