2013-05-22 3 views
0

В nhibernate вы можете использовать «Load» или «Get», чтобы взять «Id» и загрузить его в модель домена. Как вы делаете что-то подобное в EF?Как «загрузить» или «получить» домен в Entity Framework?

У меня есть некоторые «идентификаторы», которые я отправляю от клиента на свой сервер. Я хочу взять новый элемент и связать их с новым элементом без необходимости фактически получать их из db.

В NHibernate я хотел бы сделать что-то вроде этого

public void MyMethod(int brandId, string productName) 
{ 
    Product p = new Product() 
    { 
     Name = productName, 
     Brand = session.Load<Brand>(brandId) 
    }; 

    session.Save(p); 
    session.Commit(); 
} 

ответ

0

Использование Entity Framework я использую атрибут украшения на модели

public class DbEntity 
{ 
    [Key, DatabaseGenerated()] 
    public Guid Id {get;set;} 
} 

public class Product : DbEntity 
{ 
    public string Name {get;set;} 
    public virtual Brand Brand {get;set;} 
} 

public class Brand : DbEntity 
{ 
    public string Name {get;set;} 
} 

Мы используем virtual для отложенной загрузки, и в зависимости от того, хотите ли вы каскад на удаление или нет, зависит ставить ли Guid BrandId там или не.

Посмотрите на мой другой вопрос и ответ, чтобы увидеть, какие ассоциации все о: question

Чтобы получить записи и отбросы у меня есть эти классы:

  • контекст, который наследуется от DbContext System.Data.Entity (я думаю)
  • Repository, который использует экземпляр контекста
  • IRepository который ninjected

Это в хранилище, где у меня есть этот метод сохранения:

public void SaveEntity<TEntity>(TEntity entity) where TEntity : DbEntity 
{ 
    if (entity.Id.Equals(Guid.Empty)) 
     _context.Set<TENtity>().Add(entity); 
    else 
     _context.Entry(entity).State = Modified; 

    _context.SaveChanges() 
} 

public void DeleteEntity<TEntity>(TEntity entity) where TEntity : DbEntity 
{ 
    _context.Set<TEntity>().Remove(entity); 

    _context.SaveChanges(); 
} 

Таким образом, вы можете добавить столько объектов и вам нужно только один сохранить и удалить метод.

0

Ответ зависит от версии Entity Framework, который вы используете.

В EF> 4 добавлена ​​концепция FK Association. Это означает, что если ваше лицо имеет свойство, называемое BrandId, вы можете просто использовать его. См. Дополнительную информацию here.

Product p = new Product() 
{ 
    Name = productName, 
    BrandId = brandId 
}; 

Если вы используете Code First, вы можете определить это свойство на модели наряду с Brand собственности. См. Дополнительную информацию here.

public class Product { 
    public string Name { get; set; } 
    public int BrandId { get; set; } 
    public virtual Brand Brand { get; set; } 
} 

Если вы создаете модель из базы данных, вы можете установить параметр, чтобы сохранить свойства ID в конструкторе.

В EF < 4 вам необходимо создать ключ сущности на основе значения. См. this question для получения дополнительной информации.

Product p = new Product() { 
    Name = productName 
}; 
p.BrandReference.EntityKey = new EntityKey("MyEntities.Brand", "BrandId", brandId); 
+0

Я использую Ef 6 .. У меня есть BrandId в моем коде, но как насчет в ситуациях многих? Скажите почему-то, что у продукта много брендов. Как это работает? – chobo2

+0

@ chobo2 - В случае с многими отношениями, я считаю, вы можете создать новый экземпляр «Брэнд», установить его свойство «ИД» и добавить его в коллекцию «Бренды» нового «Продукта». Однако я не проверял это. – ken

+0

@ chobo2 Если вы посмотрите на мой ответ, есть ссылка, чтобы показать, как работают ассоциации ... –

Смежные вопросы