以前,我有以下实体
someClass.SendFile(file, new ActivityCallbacks.ActivityCallback((r) =>
{
success =>
{
try
{
var newmessage = new ChatroomChatMessages(r.GetString("id"), r.GetString("original_file"), Utils.convertTimestampToDate(Java.Lang.JavaSystem.CurrentTimeMillis()), "Me :", true, "16", Constants.MyId, chatroomId);
addMessage(newmessage);
}
catch (Exception e)
{
//e.printStackTrace();
}
},fail => System.Console.WriteLine("failed to send")
}));
我使用class User(ndb.Model):
name = ndb.StringProperty(required = True)
timestamp = ndb.DateTimeProperty(required = True)
作为id,通过以下方式编写我的代码
name
通过user = User.get_or_insert(name, name=name,
timestamp=datetime.datetime.fromtimestamp(user_timestamp))
作为ID,我可以使用name
执行快速阅读或更新。
现在,我决定将我的实体更改为以下内容,同时将name
和name
作为复合ID。
type
在提及https://stackoverflow.com/a/5454623/72437
之后我的第一个想法是,通过连接class User(ndb.Model):
name = ndb.StringProperty(required = True)
type = ndb.StringProperty(required = True)
timestamp = ndb.DateTimeProperty(required = True)
和name
,它实现了我的复合id目的。
type
很快,我意识到这个想法是个缺陷。由于以下情况会造成冲突。
user = User.get_or_insert(name+type, name=name, type=type
timestamp=datetime.datetime.fromtimestamp(user_timestamp))
2个不同的用户最终会使用相同的ID。
我想知道,对我来说什么是正确的方式
name type id
-------------------------
cheok paid cheokpaid
cheokp aid cheokpaid
和name
type
和name
答案 0 :(得分:4)
为什么不在连接名称和类型时使用分隔符。然后您的代码将按原样运行并解决您的问题。
例如,如果您使用'_'作为分隔符,那么
cheok paid become cheok_paid and
cheokp aid become cheokp_aid