2013-07-16 46 views
1

我会尝试解释我想要获得的内容:
我试图创建一个Guid值作为我的数据库条目的属性。
我已经检查其他问题和答案,解决我的问题,这是我目前为止型号:如何为数据库条目创建“非动态”Guid值?

public class MyModel 
{ 
    private Guid myGuid = Guid.NewGuid(); 
    public Guid MyGuid 
    { 
     get { return myGuid; } 
     set { myGuid = value; } 
    } 
} 

但问题不在此代码。因为通过这种方式,Guid值会自动生成,我可以在我的视图中验证Guid。
但是每次我在我的数据库中编辑一个条目时,Guid有点让人耳目一新,并且有所改变。这就是我称之为“动态”Guid的原因。
我猜是因为属性MyGuid每次调用数据模型的私有部分(= Guid.NewGuid();)。
那么我如何创建一个随机Guid,然后将其设置为MyGuid的值?

EDIT-1

我在模型,以创造一个更精确的Guid生成创建的方法。现在,我的模型是这样的:

public class MyModel 
{ 
    public string myGuid = Convert.ToString(new Guid()); 

    public string MyMethod(string myValue) 
    { 
     var empty = Convert.ToString(new Guid()); 
     if (myValue == null || myValue == empty) 
     { 
      var newGuid = Guid.NewGuid(); 
      string stringGuid = Convert.ToString(newGuid); 
      return stringGuid; 
     } 
     else { return myValue;} 
    } 

    public Guid MyGuid 
    { 
     get { return myGuid; } 
     set { myGuid = MyMethod(value); } 
    } 
} 

这种方法只工作一次,在另一个项目在测试过程中,然后,当我试图导入此方法,它打破了和停止工作。
使用这种方法,当我在我的数据库中创建一个条目时,它应该在每次我的Guid编辑器字段为空或者具有零Guid时生成一个Guid.NewGuid(),不是吗?
那么,为什么这个代码是在一个侧面项目上工作,而不是在另一个上工作呢?
我错过了什么?

+1

为什么不把它在构造函数? –

+0

加载'MyModel'时,您可能不会从数据库正确填充MyGuid。 'NewGuid'会作为对象构造的一部分发生,之后它应该被你的DB值覆盖 - 假设你已经正确加载它!如果你正在加载它,那么我猜你不会将它作为隐藏值存储在'View'中,因此当它回复时,它认为你正在创建一个新记录而不是编辑现有的记录。没有更多的背景,只是一种预感。 –

+0

如果要将Guid写入数据库并且要从数据库读取它,则必须以某种方式使用数据库中的值填充模型。目前所有的代码显示是,每次创建模型实例时都会创建一个新的Guid。 – David

回答

0

的时候你应该保留一些更接近于第一种模式恕我直言在数据库中创建它。

你可以简单地用GUID添加一个构造函数参数

public class MyModel 
{ 
    private Guid myGuid; 

    public MyModel() 
    { 
     myGuid = Guid.NewGuid(); 
    } 

    public MyModel(Guid guid) 
    { 
     myGuid = guid; 
    } 

    public Guid MyGuid 
    { 
     get { return myGuid; } 
     set { myGuid = value; } 
    } 
} 
+0

我试过了。但是每次创建条目时它都不会返回新的Guid ... – krvl

+0

@ Grul-也可以创建一个无参数的构造函数。看看我的编辑 –

+0

现在它的作品,谢谢! – krvl

1

而是在代码中创建一个GUID的你只能在插入这样

  DECLARE @ID uniqueidentifier 
      SET @ID = NEWID()