0

POCOクラスの使用法とエンティティ間の関係を学んでいます。

2つのテーブルがあります。そして、データモデルとそれらのPOCOクラスを作成しました。しかし、context.SaveChanges()を呼び出す前に、新しいVehicleエンティティと新しいJourneyを同時に追加しようとすると、これら2つの新しいエンティティが自動的に関連付けられます。つまり、新しいJourneyレコードのVehicleIdフィールドには、新しいVehicleレコードのIdが入力されます。

しかし、データモデルによって生成されたエンティティクラスに切り替えると、その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

私が知りたいのは、なぜ2つの新しいエンティティが関連付けられているのか、そしてどうすればこれを回避できるのかということです。助けてくれてありがとう。

4

1 に答える 1

0

よし、スラウマはコメントで答えたが、戻ってこなかった。質問での彼への私のコメントは、ページが読み込まれるときに非表示になります。おそらく彼はそれを見ていませんでした。

問題はJourneyクラスのVehicleIdプロパティにあり、そのnewJourneyのデフォルト値がnullになるようにnull可能である必要があります。だから私はVehicleIdのタイプをintとして変更しますか?。int型の場合、デフォルト値は0で、これはnewVehicleのId値と同じです。これが、これらが相関している理由だと思います。これは意味がありませんが、それがEFの仕組みです。

于 2012-08-30T01:04:39.417 に答える