我已经阅读了很多问题,但仍无法找到解决问题的方法。
我正在尝试这样的事情,我很快就画了
首先尝试:
public class CarMap : EntityTypeConfiguration<Car>
{
public CarMap()
{
ToTable("Cars", Constants.Schema);
Property(t => t.EngineId);
HasRequired(x => x.SPropertyPolicyInsurance).WithMany().HasForeignKey(x => x.SPropertyPolicyInsuranceId);
}
}
public class Car : MyBase
{
public int EngineId { get; set; }
public virtual Engine Engine { get; set; }
}
public class EngineMap : EntityTypeConfiguration<Engine>
{
public EngineMap()
{
ToTable("Engines", Constants.Schema);
Property(t => t.MyField1).HasColumnType("nvarchar").HasMaxLength(128).IsRequired();
Property(t => t.MyField2).HasColumnType("nvarchar").HasMaxLength(128).IsRequired();
Property(t => t.MyField3).HasColumnType("bit").IsRequired();
}
}
public class Engine : MyBase
{
public string MyField1 { get; set; }
public string MyField2 { get; set; }
public bool MyField3 { get; set; }
public virtual Car Car { get; set; }
}
使用此解决方案,我会在我的引擎表上创建一个我不想要的新列...
第二次尝试:
将CarMap更改为以下代码:
public class CarMap : EntityTypeConfiguration<Car>
{
public CarMap()
{
ToTable("Cars", Constants.Schema);
Property(t => t.EngineId);
HasRequired(x => x.Engine).WithOptional(p => p.Car);
}
}
问题是它没有使用EngineId列存储我的FK密钥值...
非常感谢你的帮助......
答案 0 :(得分:0)
没关系,它现在正在工作,我清理了所有代码,删除了可能存在冲突的额外关系,现在使用以下Fluent API关系,它只使用一个FK列( ENGINEID)。
生成的代码首次迁移如下:
CreateTable(
"myschema.Engines",
c => new
{
Id = c.Int(nullable: false),
myfield = c.String(nullable: false, maxLength: 128),
myfield2 = c.String(nullable: false, maxLength: 128),
myfield3 = c.Boolean(nullable: false),
})
.PrimaryKey(t => t.Id)
.ForeignKey("basechema.Engines", t => t.Id)
.Index(t => t.Id);
CreateTable(
"myschema.Cars",
c => new
{
Id = c.Int(nullable: false),
EngineId = c.Int(nullable: false),
})
.PrimaryKey(t => t.Id)
.ForeignKey("baseschema.Cars", t => t.Id)
.ForeignKey("myschema.Engines", t => t.EngineId)
.Index(t => t.Id)
.Index(t => t.EngineId);
我希望它可以帮助那里的人;)