2013-10-31 40 views
1

上下文:LINQ - 生成身份對象

A用戶是一個實體和一個組由1個或多個實體。 用戶使用他的電子郵件登錄他的entityID(= userID)。當需要創建用戶時,他會用USER表中的信息填充表單(不包括他的用戶ID ofc)。爲了產生用戶的ID,我首先需要產生在ABSTRACT_ENTITY表他的ID,因爲該組ID的和用戶ID的必須是唯一的(閱讀:絕不能衝突)

問:

  • 怎麼辦我讓LINQ在ABSRACT_ENTITY表中爲ID生成/創建下一個標識?

在其他情況下,它是相當容易的,因爲你只是在其他行填寫,它會自動生成,但在這種情況下,有沒有其他的行...

Database Diagram

+0

什麼是'abstract_entity'表點的唯一領域? –

+0

@JensKloster添加抽象級別。稍後我們不需要知道某件事是用戶還是組,所以我們只需處理實體ID – David

+0

,那麼它們有什麼共同點? –

回答

1

SOLUTION

Abstract_Entity ae = new Abstract_Entity(); 
Entities.Abstract_Entity.Add(ae); 
Entities.SaveChanges(); 

User u = new User(); 
u.email = email; 
u.userID = ae.ID; 
Entities.User.Add(u); 
Entities.SaveChanges(); 
1

一些sudocode

Abstract_Entity entity = new Abstract_Entity(); 
entity.ID = Guid.NewGuid(); 

User user = new User(); 
//fill with user data 
user.userID = entity.ID; 

MyContext db = new MyContext(); 
db.Abstract_Entitys.Attach(entity); 
db.Users.Attach(user); 
db.SubmitChanges(); 

這裏的想法是,所有的ID都是sql類型uniqueidentifier,它是c#類型的Guid。 GUID是獨特http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates

所有意圖和目的,如果你不想生成代碼的GUID,你可以配置你的數據庫上下文自動通過AutoGenerateValues設置爲true,並在數據庫中生成值設置DefaultValueOrBinding到(NEWID( ))

+0

這是一個解決方案,但不是我正在尋找的解決方案。對這個項目使用GUID是有點矯枉過正的。無論如何謝謝你的努力。現在我只需添加一個列來填充無用的數據來強制linq生成下一個標識。這是骯髒的,但我可以很容易地清理它,當我有我正在尋找的解決方案。 – David

1

把東西用戶和組共同具有表abstract_entity

如果你不能想到的東西,然後只需添加一個「創建」字段(作爲DATATIME)。這將足以讓EF爲abstract_entity.Id產生一個值。
對於EF,自動設置的標識字段應在創建記錄時忽略。
這就是爲什麼它不能在表上

+0

僅僅添加一個無用信息的列來強制LINQ生成ID會感覺很骯髒。 我可能只是添加一個刪除的標誌或其他東西,這可能是有用的在未來 – David

+0

更加骯髒,添加*表*沒有有用的信息;)?但我知道你的意思 - 我們有同樣的問題,回來 –

+0

找到了簡單的解決方案 – David