我正在学习POCO类的使用和实体之间的关系。
我有两张桌子。我为他们创建了数据模型和POCO类。但是当我在调用context.SaveChanges()之前尝试同时添加新的Vehicle实体和新的Journey时,这两个新实体将自动关联。这意味着,新的Journey记录将使用新车辆记录的Id填充其VehicleId字段。
但是当我切换到Data Model生成的实体类时,VehicleId将为null。
以下是我用来插入实体的代码:
using (var context = new TravelEntities())
{
var newVehicle = new Vehicle();
newVehicle.Name = "Fly by yourself";
context.Vehicles.AddObject(newVehicle);
var newJourney = new Journey();
newJourney.Location = "Wuyishan";
context.Journeys.AddObject(newJourney);
context.SaveChanges();
}
POCO类和上下文类:
public class Vehicle
{
public virtual int Id { get; set; }
public virtual String Name { get; set; }
public virtual ICollection<Journey> Journeys { get; set; }
}
public class Journey
{
public virtual int Id { get; set; }
public virtual String Location { get; set; }
public virtual int VehicleId { get; set; }
public virtual Vehicle Vehicle { get; set; }
}
class TravelEntities : ObjectContext
{
ObjectSet<Vehicle> _vehicles;
ObjectSet<Journey> _journeys;
public TravelEntities()
: base("name=TravelEntities", "TravelEntities")
{
_vehicles = CreateObjectSet<Vehicle>();
_journeys = CreateObjectSet<Journey>();
}
public ObjectSet<Vehicle> Vehicles { get { return _vehicles; } }
public ObjectSet<Journey> Journeys { get { return _journeys; } }
}
以下是数据库架构:
create table Vehicle
(
Id int identity(1,1) primary key,
Name nvarchar(max)
)
go
create table Journey
(
Id int identity(1,1) primary key,
Location nvarchar(max),
VehicleId int,
constraint FK_Journey_Vehicle foreign key(VehicleId) references Vehicle(Id)
)
go
我想知道的是为什么两个新实体相关联,我该如何避免这种情况。谢谢你的帮助。
答案 0 :(得分:0)
好吧,Slauma在他的评论中给出了答案,但他没有回来。当页面加载时,我在问题中对他的评论是隐藏的,也许他没有看到它。
问题在于Journey类的VehicleId属性,它应该是可空的,以便该newJourney的默认值为null。所以我将VehicleId的类型更改为int? 。当它是int类型时,默认值是0,它等于newVehicle的Id值,我认为这就是它们相关的原因。这没有意义,但这就是EF的工作方式。