2015-11-28 1 views
1

У меня есть некоторые объекты:создать объект с идентификатором другого лица, но без связи между

class Cat 
{ 
    public long Id {get;set;} 
    public string Name {get;set;} 
} 

class Dog 
{ 
    public long Id {get;set;} 
    public string Name {get;set;} 
} 

class Log 
{ 
    public long EntityId {get;set;} // cat Id, or dog Id 
    public int EntityType {get;set;} //cat or dog 
    public string Payload {get;set;} //some information 
} 

Я хочу, чтобы создать новую Log записи для каждого вставки и обновления действия. Это легко сделать в инструкции обновления, когда у меня есть кошка или собака Id.

var cat = GetCatFromDb(); 
//cat.Id != 0 
UpdateCat(cat); 
DbContext.Set<Log>().Add(new Log {EntityId = cat.Id, EntityType = 1}); 

Но это трудно создать новую запись журнала, когда я ввожу новый Cat или Dog объект, потому, что они не имеют отношения с Cat и Log.

var cat = new Cat{Name = "Kitty"}; 
//cat.Id == 0 
DbContext.Set<Log>().Add(new Log {EntityId = cat.Id, EntityType = 1}); 

Но я не хочу, чтобы добавить свойство навигации в Cat, Dog или Log класса, потому что Log это таблица системы и не имеют никакого отношения к «БИЗНЕС» объекты.

Мой пример прост, у меня есть объекты, и я могу изменить многие из них во многих местах за одну транзакцию. Итак, я хочу зарегистрировать их все. Есть ли способ получить это? Возможно, используя класс DbContext?

ответ

1

После добавления нового кота, сохранить изменения и затем использовать кошку Id:

var db = new YourContext(); 
var cat= new Cat(){Name="New Cat"}; 
db.Set<Cat>().Add(cat); 
db.SaveChanges(); 

// Here it will use inserted cat Id 
// MessageBox.Show(cat.Id.ToString()); 
db.Set<Log>().Add(new Log {EntityId = cat.Id, EntityType = 1}); 
+0

Да, я могу. Мой пример прост, у меня есть объекты, и я могу изменить многие из них во многих местах в одной транзакции. Итак, мне нужно найти все из них, вызвать SaveChanges, получить идентификатор и снова вызвать SaveChanges для журнала. – Backs

+0

Да, вы должны сделать это, чтобы найти новые вставленные идентификаторы. –

+0

@Backs Позвольте мне знать, если у вас есть какие-либо вопросы по поводу ответа или если вы найдете его полезным :) –