8

私の英語は上手ではないので、私は要点をまっすぐに言います。データベースにレコード会社が新しいレコードを作成し、顧客レコードが新しい会社レコードを参照するのはなぜですか?手伝ってくれてありがとう :)

public class Company : EntityBase
{
    public string Name { get; set; }

    public List<Customer> Customers { get; set; }
    public List<Invoice> Invoices { get; set; }
}

public class Customer : EntityBase
{
    public string Name { get; set; }

    public Company Company { get; set; }
    public List<Card> Cards { get; set; }
}

public class EFRepositoryBase<TEntity> where TEntity : class, IEntity, new()
{
    protected IUnitOfWork UnitOfWork { get; set; }

    protected BenzineFleetContext Context
    {
        get { return (BenzineFleetContext) UnitOfWork; }
    }

    public virtual DbSet<TEntity> GetDbSet<TEntity>() where TEntity : class
    {
        return Context.Set<TEntity>();
    }

    public virtual void Add(TEntity entity)
    {
        GetDbSet<TEntity>().Add(entity);
    }

    public virtual void SaveChanges()
    {
        Context.SaveChanges();
    }
}

    //Save

var cus = new Customer {Company = SelectedCompany}

    _srv.Add(cus);
    _srv.SaveChanges();
4

2 に答える 2

15

メソッドを介してエンティティを追加する場合DbSet<T>.Add、エンティティと、まだコンテキストに含まれていないすべての参照エンティティはAdded、ChangeTrackerでマークされます。そのため、新しい会社が追加されます(会社がコンテキストに関連付けられていないように見えます)。

var customer = new Customer {Company = SelectedCompany}
context.Customers.Add(customer);
// at this point customer state will be Added
// company state also will be Added
context.SaveChanges();

このような動作を回避するには、新しい顧客を追加する前に、会社をコンテキストに関連付けます。

var customer = new Customer {Company = SelectedCompany}
context.Companies.Attach(SelectedCompany);
context.Customers.Add(customer);
// at this point customer state will be Added
// company state will be Unchanged (if you haven't change it)
context.SaveChanges();

別の方法は、状態を手動で維持することです。

var customer = new Customer {Company = SelectedCompany}
context.Customers.Add(customer);
context.Entry(SelectedCompany).State = EntityState.Unchanged;
// at this point customer state will be Added
// company state will be Unchanged
context.SaveChanges();
于 2013-03-09T11:19:56.150 に答える
-2

Entity Frameworkで、すべての基本的なCRUD(Create Read Update Delete)操作についてこれこれを確認できます。それはあなたに非常に役立ちます。また、外部キーの基金と1対多の関係を簡単に理解できます。

于 2013-03-09T11:26:38.657 に答える